-
Notifications
You must be signed in to change notification settings - Fork 2
/
homunculus.js.map
1 lines (1 loc) · 742 KB
/
homunculus.js.map
1
{"version":3,"file":"homunculus.js","sources":["src/util/Class.js","src/util/character.js","src/lexer/Token.js","src/util/walk.js","src/lexer/Lexer.js","src/lexer/rule/Rule.js","src/lexer/CssToken.js","src/lexer/match/Match.js","src/lexer/match/RegMatch.js","src/lexer/CssLexer.js","src/lexer/HtmlToken.js","src/lexer/HtmlLexer.js","src/lexer/match/LineSearch.js","src/lexer/match/LineParse.js","src/lexer/match/CompleteEqual.js","src/lexer/match/CharacterSet.js","src/lexer/rule/EcmascriptRule.js","src/lexer/EcmascriptLexer.js","src/lexer/JSXToken.js","src/lexer/JSXLexer.js","src/lexer/CSXToken.js","src/lexer/CSXLexer.js","src/lexer/AxmlToken.js","src/lexer/AxmlLexer.js","src/lexer/rule/CssRule.js","src/lexer/rule/JavaRule.js","src/lexer/rule/CRule.js","src/lexer/rule/HtmlRule.js","src/lexer/rule/AxmlRule.js","src/parser/Parser.js","src/parser/Node.js","src/parser/js/Node.js","src/parser/js/Parser.js","src/parser/es6/Node.js","src/parser/es6/Parser.js","src/parser/css/Node.js","src/parser/css/Parser.js","src/parser/html/Node.js","src/parser/html/Parser.js","src/parser/jsx/Node.js","src/parser/jsx/Parser.js","src/parser/csx/Node.js","src/parser/csx/Parser.js","src/parser/axml/Node.js","src/parser/axml/Parser.js","src/parser/js/Context.js","src/homunculus.js"],"sourcesContent":["function inheritPrototype(subType, superType) {\n var prototype = Object.create(superType.prototype);\n prototype.constructor = subType;\n subType.prototype = prototype;\n //继承static变量\n Object.keys(superType).forEach(function(k) {\n subType[k] = superType[k];\n });\n return subType;\n}\nfunction wrap(fn) {\n fn.extend = function(sub) {\n inheritPrototype(sub, fn);\n return wrap(sub);\n }\n fn.methods = function(o) {\n Object.keys(o).forEach(function(k) {\n fn.prototype[k] = o[k];\n });\n return fn;\n };\n fn.statics = function(o) {\n Object.keys(o).forEach(function(k) {\n fn[k] = o[k];\n });\n return fn;\n };\n return fn;\n}\nfunction klass(cons) {\n return wrap(cons || function() {});\n}\nklass.extend = inheritPrototype;\nmodule.exports = klass;","exports.LINE = '\\n';\nexports.ENTER = '\\r';\nexports.BLANK = ' ';\nexports.TAB = '\\t';\nexports.UNDERLINE = '_';\nexports.DOLLAR = '$';\nexports.SHARP = '#';\nexports.MINUS = '-';\nexports.AT = '@';\nexports.SLASH = '/';\nexports.BACK_SLASH = '\\\\';\nexports.DECIMAL = '.';\nexports.LEFT_BRACKET = '[';\nexports.RIGHT_BRACKET = ']';\nexports.LEFT_BRACE = '{';\nexports.RIGHT_BRACE = '}';\nexports.STAR = '*';\nexports.LEFT_PARENTHESE = '(';\nexports.RIGHT_PARENTHESE = ')';\nexports.COMMA = ',';\nexports.SEMICOLON = ';';\nexports.EQUAL = '=';\nexports.GRAVE = '`';\nexports.isDigit = function(c) {\n return c >= '0' && c <= '9';\n};\nexports.isDigit16 = function(c) {\n return exports.isDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\n};\nexports.isDigit2 = function(c) {\n return c == '0' || c == '1';\n};\nexports.isDigit8 = function(c) {\n return c >= '0' && c <= '7';\n};\nexports.isLetter = function(c) {\n return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n};\nexports.count = function(s, c) {\n var count = 0,\n i = -1;\n while((i = s.indexOf(c, i + 1)) != -1) {\n count++;\n }\n return count;\n};\nexports.isUndefined = function(s) {\n return typeof s == 'undefined';\n};\nexports.isString = function(s) {\n return Object.prototype.toString.call(s) == \"[object String]\";\n};\nexports.isNumber = function(s) {\n return Object.prototype.toString.call(s) == \"[object Number]\";\n};","var Class = require('../util/Class');\nvar character = require('../util/character');\nvar tid = 0;\nvar types;\nvar Token = Class(function(type, content, val, sIndex) {\n this.t = type; //token类型\n this.c = content; //token的字面内容,string包括头尾的引号\n this.pr = null;\n this.ne = null;\n this.li = -1;\n this.co = -1;\n if(character.isNumber(val)) {\n sIndex = val;\n val = content;\n }\n else if(character.isUndefined(val)) {\n val = content;\n sIndex = -1;\n }\n this.v = val; //token的值,一般情况下等于content,特殊如string情况下值是不加头尾的引号\n this.id = tid++; //token的索引\n this.si = sIndex; //token在源码字符串中的索引\n}).methods({\n type: function(t) {\n if(t !== void 0) {\n this.t = t;\n }\n return this.t;\n },\n content: function(c) {\n if(c !== void 0) {\n this.c = c;\n }\n return this.c;\n },\n val: function(v) {\n if(v !== void 0) {\n this.v = v;\n }\n return this.v;\n },\n tag: function(t) {\n if(t !== void 0) {\n this.t = t;\n }\n return Token.type(this.t);\n },\n tid: function(id) {\n if(id !== void 0) {\n this.id = id;\n }\n return this.id;\n },\n sIndex: function(si) {\n if(si !== void 0) {\n this.si = si;\n }\n return this.si;\n },\n prev: function(t) {\n if(t !== void 0) {\n this.pr = t;\n }\n return this.pr;\n },\n next: function(t) {\n if(t !== void 0) {\n this.ne = t;\n }\n return this.ne;\n },\n cancel: function() {\n tid--;\n },\n isVirtual: function() {\n return this.t == Token.VIRTUAL;\n },\n line: function(i) {\n if(i !== undefined) {\n this.li = i;\n }\n return this.li;\n },\n col: function(i) {\n if(i !== undefined) {\n this.co = i;\n }\n return this.co;\n }\n}).statics({\n //公用\n IGNORE: -2,\n VIRTUAL: -1,\n OTHER: 0,\n BLANK: 1,\n TAB: 2,\n LINE: 3,\n NUMBER: 4,\n ID: 5,\n COMMENT: 6,\n STRING: 7,\n SIGN: 8,\n KEYWORD: 10,\n //js部分\n REG: 9,\n //es6\n TEMPLATE: 13,\n //仅java\n ANNOT: 11,\n //基本无用\n ENTER: 14,\n TEMPLATE_HEAD: 29,\n TEMPLATE_MIDDLE: 30,\n TEMPLATE_TAIL: 31,\n type: function(tag) {\n var self = this;\n if(character.isUndefined(types)) {\n types = [];\n Object.keys(self).forEach(function(o) {\n if(typeof self[o] == 'number') {\n types[self[o]] = o;\n }\n });\n }\n return types[tag];\n },\n reset: function() {\n tid = 0;\n }\n});\nmodule.exports = Token;","var index;\n\nfunction recursion(node, ignore, nodeVisitors, tokenVisitors) {\n var isToken = node.isToken();\n if(isToken) {\n var token = node.token();\n var isVirtual = token.isVirtual();\n if(!isVirtual) {\n var ignores = [];\n while(ignore[++index]) {\n ignores.push(ignore[index]);\n }\n if(tokenVisitors.hasOwnProperty(token.type())) {\n tokenVisitors[token.type()](token, ignores);\n }\n }\n }\n else {\n if(nodeVisitors.hasOwnProperty(node.name())) {\n nodeVisitors[node.name()](node);\n }\n node.leaves().forEach(function(leaf) {\n recursion(leaf, ignore, nodeVisitors, tokenVisitors);\n });\n }\n}\n\nexports.simple = function(node, nodeVisitors, tokenVisitors) {\n exports.simpleIgnore(node, {}, nodeVisitors, tokenVisitors)\n};\n\nexports.simpleIgnore = function(node, ignore, nodeVisitors, tokenVisitors) {\n index = 0;\n while(ignore[index]) {\n ignore[index++];\n }\n nodeVisitors = nodeVisitors || {};\n tokenVisitors = tokenVisitors || {};\n recursion(node, ignore, nodeVisitors, tokenVisitors);\n};\n\nfunction rcs(node, callback) {\n var isToken = node.isToken();\n if(isToken) {\n var token = node.token();\n var isVirtual = token.isVirtual();\n if(!isVirtual) {\n callback(token, true);\n }\n }\n else {\n callback(node);\n node.leaves().forEach(function(leaf) {\n rcs(leaf, callback);\n });\n }\n}\n\nexports.recursion = function(node, callback) {\n rcs(node, callback);\n};\n\nfunction toPlainObject(node, res) {\n var isToken = node.isToken();\n if(isToken) {\n var token = node.token();\n var isVirtual = token.isVirtual();\n if(!isVirtual) {\n res.push(token.content());\n }\n }\n else {\n res.push(node.name().toUpperCase());\n var childs = [];\n res.push(childs);\n node.leaves().forEach(function(leaf) {\n toPlainObject(leaf, childs);\n });\n }\n return res;\n}\n\nexports.plainObject = function(obj) {\n //token\n if(Array.isArray(obj)) {\n var res = [];\n obj.forEach(function(token) {\n res.push(token.content());\n });\n return res;\n }\n //ast\n else {\n return toPlainObject(obj, []);\n }\n};","var Class = require('../util/Class');\nvar character = require('../util/character');\nvar Token = require('./Token');\nvar walk = require('../util/walk');\n\nvar Lexer = Class(function(rule) {\n this.rule = rule; //当前语法规则\n this.init();\n}).methods({\n init: function() {\n this.code = ''; //要解析的代码\n this.peek = ''; //向前看字符\n this.index = 0; //向前看字符字符索引\n this.isReg = Lexer.IS_REG; //当前/是否是perl风格正则表达式\n this.tokenList = []; //结果的token列表\n this.parentheseState = false; //(开始时标记之前终结符是否为if/for/while等关键字\n this.parentheseStack = []; //圆括号深度记录当前是否为if/for/while等语句内部\n this.braceState = false; //{是object还是block\n this.braceStack = []; //深度记录\n this.cacheLine = 0; //行缓存值\n this.totalLine = 1; //总行数\n this.colNum = 0; //列\n this.colMax = 0; //最大列数\n this.isReturn = false; //当出现return,后面有换行则自动插入;,影响{的语意\n this.last = null;\n },\n parse: function(code) {\n this.code = code || '';\n var temp = [];\n this.scan(temp);\n return temp;\n },\n parseOn: function() {\n var temp = [];\n this.scan(temp);\n return temp;\n },\n tokens: function(plainObject) {\n if(plainObject) {\n return walk.plainObject(this.tokenList);\n }\n return this.tokenList;\n },\n scan: function(temp) {\n var perlReg = this.rule.perlReg();\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n this.readch();\n //perl风格正则\n if(perlReg\n && this.isReg == Lexer.IS_REG\n && this.peek == character.SLASH\n && !{ '/': true, '*': true }[this.code.charAt(this.index)]) {\n this.dealReg(temp, length);\n this.isReg = Lexer.NOT_REG;\n }\n //依次遍历匹配规则,命中则继续\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new Token(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n if(token.type() == Token.ID\n && this.rule.keyWords().hasOwnProperty(token.content())) {\n token.type(Token.KEYWORD);\n }\n\n //回调可自定义处理匹配的token\n if(match.callback) {\n match.callback.call(match, token, this.tokenList);\n }\n //回调特殊处理忽略掉此次匹配\n if(match.cancel) {\n token.cancel();\n continue;\n }\n\n var n = character.count(token.val(), character.LINE);\n count += n;\n //处理token\n this.dealToken(token, matchLen, n, temp);\n //支持perl正则需判断关键字、圆括号对除号语义的影响\n if(perlReg && match.perlReg() != Lexer.IGNORE) {\n this.stateReg(match);\n }\n //处理{\n this.stateBrace(match.content(), token.type());\n\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n return this;\n },\n dealToken: function(token, matchLen, count, temp) {\n if(this.last) {\n token.prev(this.last);\n this.last.next(token);\n }\n this.last = token;\n temp.push(token);\n this.tokenList.push(token);\n this.index += matchLen - 1;\n token.line(this.totalLine);\n token.col(this.colNum);\n this.totalLine += count;\n if(count) {\n var j = token.content().indexOf(character.LINE);\n var k = token.content().lastIndexOf(character.LINE);\n this.colMax = Math.max(this.colMax, this.colNum + j);\n this.colNum = token.content().length - k;\n }\n else {\n this.colNum += matchLen;\n }\n this.colMax = Math.max(this.colMax, this.colNum);\n },\n stateReg: function(match) {\n if(match.perlReg() == Lexer.SPECIAL) {\n this.isReg = match.special();\n }\n else {\n this.isReg = match.perlReg();\n }\n if(this.peek == character.LEFT_PARENTHESE) {\n this.parentheseStack.push(this.parentheseState);\n this.parentheseState = false;\n }\n else if(this.peek == character.RIGHT_PARENTHESE) {\n this.isReg = this.parentheseStack.pop() ? Lexer.IS_REG : Lexer.NOT_REG;\n }\n else {\n this.parentheseState = match.parenthese();\n }\n },\n stateBrace: function(content, type) {\n if(content == '{') {\n if(this.isReturn) {\n this.braceState = true;\n }\n this.braceStack.push(this.braceState);\n this.isReturn = false;\n }\n else if(content == '}') {\n this.braceState = this.braceStack.pop();\n if(this.braceState) {\n this.isReg = false;\n }\n this.isReturn = false;\n }\n else if(type == Token.SIGN) {\n //反向设置,符号大多出现expr中,后跟{表示object;某些不能跟;以下(换行)跟表示block\n this.braceState = !{\n '--': true,\n '++': true,\n '=>': true,\n ';': true,\n ')': true\n }.hasOwnProperty(content);\n this.isReturn = false;\n }\n else if(type == Token.KEYWORD) {\n this.braceState = {\n 'instanceof': true,\n 'delete': true,\n 'void': true,\n 'typeof': true,\n 'return': true\n }.hasOwnProperty(content);\n this.isReturn = content == 'return';\n }\n else if([Token.BLANK, Token.TAB, Token.LINE, Token.COMMENT].indexOf(type) == -1) {\n this.braceState = false;\n }\n else if(type == Token.LINE\n || type == Token.COMMENT\n && content.indexOf('\\n') > -1) {\n if(this.isReturn) {\n this.braceState = false;\n this.isReturn = false;\n }\n }\n },\n dealReg: function(temp, length) {\n var lastIndex = this.index - 1;\n var res = false;\n outer:\n do {\n this.readch();\n if(this.peek == character.LINE) {\n this.error('SyntaxError: unterminated regular expression literal '\n + this.peek, this.code.slice(lastIndex, this.index));\n break;\n }\n else if(this.peek == character.BACK_SLASH) {\n this.index++;\n }\n else if(this.peek == character.LEFT_BRACKET) {\n do {\n this.readch();\n if(this.peek == character.LINE) {\n this.error('SyntaxError: unterminated regular expression literal '\n + this.peek, this.code.slice(lastIndex, this.index));\n break outer;\n }\n else if(this.peek == character.BACK_SLASH) {\n this.index++;\n }\n else if(this.peek == character.RIGHT_BRACKET) {\n continue outer;\n }\n } while(this.index < length);\n }\n else if(this.peek == character.SLASH) {\n res = true;\n var hash = {};\n var flag = {\n 'g': true,\n 'i': true,\n 'm': true,\n 'u': true,\n 'y': true\n };\n //正则的flag中有gimuy5种,大小写敏感且不能重复\n do {\n this.readch();\n if(character.isLetter(this.peek)) {\n if(hash.hasOwnProperty(this.peek) || !flag.hasOwnProperty(this.peek)) {\n this.error('SyntaxError: invalid regular expression flag '\n + this.peek, this.code.slice(lastIndex, this.index));\n break outer;\n }\n hash[this.peek] = true;\n }\n else {\n break outer;\n }\n } while(this.index <= length);\n }\n } while(this.index < length);\n if(!res) {\n this.error('SyntaxError: unterminated regular expression literal',\n this.code.slice(lastIndex, this.index - 1));\n }\n var token = new Token(Token.REG, this.code.slice(lastIndex, --this.index), lastIndex);\n this.index = lastIndex + 1;\n this.dealToken(token, token.content().length, 0, temp);\n },\n readch: function() {\n this.peek = this.code.charAt(this.index++);\n },\n cache: function(i) {\n if(!character.isUndefined(i) && i !== null) {\n this.cacheLine = i;\n }\n return this.cacheLine;\n },\n finish: function() {\n return this.index >= this.code.length;\n },\n line: function() {\n return this.totalLine;\n },\n col: function() {\n return this.colMax;\n },\n error: function(s, str) {\n if(character.isUndefined(str)) {\n str = this.code.substr(this.index - 1, 20);\n }\n if(Lexer.mode() === Lexer.STRICT) {\n throw new Error(s + ', line ' + this.line() + ' col ' + this.colNum + '\\n' + str);\n }\n else if(Lexer.mode() === Lexer.LOOSE && typeof console !== void 0) {\n console.warn(s + ', line ' + this.line() + ' col ' + this.colNum + '\\n' + str);\n }\n return this;\n }\n}).statics({\n IGNORE: 0,\n IS_REG: 1,\n NOT_REG: 2,\n SPECIAL: 3,\n STRICT: 0,\n LOOSE: 1,\n mode: function(i) {\n if(!character.isUndefined(i)) {\n cmode = i;\n }\n return cmode;\n }\n});\nvar cmode = Lexer.STRICT;\nmodule.exports = Lexer;\n","var Class = require('../../util/Class');\nvar Rule = Class(function(words, pReg) {\n var self = this;\n self.kw = {};\n words.forEach(function(o) {\n self.kw[o] = true;\n });\n self.pReg = pReg || false;\n self.matchList = [];\n }).methods({\n perlReg: function() {\n return this.pReg;\n },\n addMatch: function(match) {\n this.matchList.push(match);\n return this;\n },\n matches: function() {\n return this.matchList;\n },\n keyWords: function() {\n return this.kw;\n },\n addKeyWord: function(v) {\n this.kw[v] = true;\n return this.kw;\n }\n });\nmodule.exports = Rule;","var Token = require('./Token');\n\nvar CssToken = Token.extend(function(type, content, val, sIndex) {\n Token.call(this, type, content, val, sIndex);\n}).statics({\n HEAD: 12,\n PROPERTY: 15,\n VARS: 16,\n HACK: 17,\n IMPORTANT: 18,\n PSEUDO: 19,\n UNITS: 20,\n SELECTOR: 21,\n ATTR: 22,\n COLOR: 23\n});\n\nmodule.exports = CssToken;","var Class = require('../../util/Class');\nvar character = require('../../util/character');\nvar Lexer = require('../Lexer');\nmodule.exports = Class(function(type, setPReg, special, parenthese) {\n this.type = type;\n if(character.isUndefined(setPReg)) {\n setPReg = Lexer.IGNORE;\n }\n this.setPReg = setPReg;\n this.result = null;\n //忽略0,是1,否2,特殊3\n if(setPReg) {\n if(character.isUndefined(special)) {\n special = function() {\n return Lexer.IGNORE;\n };\n }\n if(character.isUndefined(parenthese)) {\n parenthese = function() {\n return false;\n };\n }\n }\n this.special = special;\n this.parenthese = parenthese;\n}).methods({\n tokenType: function() {\n return this.type;\n },\n perlReg: function() {\n return this.setPReg;\n },\n val: function() {\n return this.content();\n },\n content: function() {\n return this.result;\n },\n match: function(c, code, index) {\n //需被实现\n throw new Error('match needs to be implement');\n },\n error: function() {\n return false;\n }\n});","var Match = require('./Match');\nvar RegMatch = Match.extend(function(type, reg, valid, setPReg, special, parenthese) {\n if(typeof valid == 'number') {\n parenthese = special;\n special = setPReg;\n setPReg = valid;\n valid = null;\n }\n Match.call(this, type, setPReg, special, parenthese);\n this.reg = reg;\n this.valid = valid;\n }).methods({\n match: function(c, code, index) {\n var self = this,\n res = self.reg.exec(code.slice(index - 1));\n self.msg = null;\n if(res) {\n self.result = res[0];\n if(self.valid) {\n for(var i = 0, keys = Object.keys(self.valid), len = keys.length; i < len; i++) {\n if(self.valid[keys[i]].test(self.result)) {\n self.msg = keys[i];\n break;\n }\n }\n }\n return true;\n }\n return false;\n },\n error: function() {\n return this.msg;\n }\n });\nmodule.exports = RegMatch;","var Lexer = require('./Lexer');\nvar Token = require('./CssToken');\nvar character = require('../util/character');\nvar RegMatch = require('./match/RegMatch');\nvar S = {\n '\\n': true,\n '\\r': true,\n ' ': true,\n '\\t': true\n};\nvar ADD_VALUE = new RegMatch(Token.ID, /^[a-z][\\w\\-\\+\\.]*/i);\nvar CssLexer = Lexer.extend(function(rule) {\n Lexer.call(this, rule);\n this.media = false;\n this.impt = false;\n this.value = false;\n this.parenthese = false;\n this.bracket = false;\n this.number = false;\n this.url = false;\n this.kw = false;\n this.sel = true;\n this.va = false;\n this.cvar = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n this.supports = false;\n this.extend = false;\n this.param = false;\n this.depth = 0;\n}).methods({\n //@override\n scan: function(temp) {\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n this.readch();\n //(之后的字符串可省略\"号\n if(this.parenthese && this.url) {\n if(!S.hasOwnProperty(this.peek)\n && !{\n \"'\": true,\n '\"': true,\n ')': true,\n '$': true\n }.hasOwnProperty(this.peek)) {\n this.dealPt(temp);\n this.url = false;\n continue outer;\n }\n //url只能省略一次,即url()中第一个出现的非空白token,多个的话不能省略\n this.url = false;\n }\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new Token(match.tokenType(), match.content(), match.val(), this.index - 1);\n var matchLen = match.content().length;\n\n //回调可自定义处理匹配的token\n if(match.callback) {\n match.callback(token);\n }\n\n var s = token.content().toLowerCase();\n switch(token.type()) {\n //单位必须紧跟数字,否则便不是单位\n case Token.BLANK:\n case Token.TAB:\n case Token.LINE:\n this.number = false;\n break;\n //@import和@media之后进入值状态\n case Token.HEAD:\n s = s.replace(/^@(-moz-|-o-|-ms-|-webkit-|-vx-|-hp-|-khtml-|mso-|-prince-|-rim-|-ro-|-tc-|-wap-|-apple-|-atsc-|-ah-)/, '@');\n this.sel = false;\n this.kw = false;\n this.value = true;\n this.number = false;\n this.va = false;\n switch(s) {\n case '@import':\n this.impt = true;\n break;\n case '@media':\n this.media = true;\n break;\n case '@page':\n this.page = true;\n break;\n case '@keyframes':\n this.kf = true;\n break;\n case '@document':\n this.doc = true;\n break;\n case '@supports':\n this.supports = true;\n break;\n case '@extend':\n this.extend = true;\n this.value = false;\n this.sel = true;\n break;\n }\n break;\n //单位要跟在数字之后,否则便不是单位\n case Token.UNITS:\n if(!this.number) {\n continue;\n }\n this.sel = false;\n this.kw = false;\n this.va = false;\n this.number = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.KEYWORD:\n if(!this.value || this.supports) {\n this.kw = true;\n this.url = false;\n this.va = false;\n this.sel = false;\n this.number = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n this.parenthese = false;\n }\n break;\n case Token.COLOR:\n if(!this.value && !this.param && !this.cvar) {\n token.type(Token.SELECTOR);\n }\n break;\n //将id区分出属性名和属性值\n case Token.ID:\n if(this.bracket && this.sel) {\n token.type(Token.ATTR);\n this.url = false;\n this.va = false;\n }\n else if(this.extend) {\n token.type(Token.SELECTOR);\n }\n else if(this.number) {\n token.type(Token.UNITS);\n this.url = false;\n this.kw = false;\n this.va = false;\n }\n else if(this.page || this.kf || this.ns) {\n this.sel = true;\n this.url = false;\n this.kw = false;\n this.va = false;\n this.value = false;\n }\n else if(this.va) {\n token.type(Token.VARS);\n this.url = false;\n this.va = false;\n }\n else if(this.supports) {\n if(this.rule.keyWords().hasOwnProperty(s)) {\n token.type(Token.KEYWORD);\n }\n else {\n token.type(Token.PROPERTY);\n }\n }\n else if(this.param || this.cvar) {\n //value时id可以带+号,必须紧跟\n if(this.code.charAt(this.index) == '+') {\n ADD_VALUE.match(this.peek, this.code, this.index);\n token = new Token(ADD_VALUE.tokenType(), ADD_VALUE.content(), ADD_VALUE.val(), this.index - 1);\n matchLen = ADD_VALUE.content().length;\n }\n if(this.rule.keyWords().hasOwnProperty(s)) {\n //前面是hack也作为关键字\n if(this.tokenList[this.tokenList.length - 1].type() == Token.HACK) {\n token.type(Token.KEYWORD);\n this.kw = true;\n }\n else {\n //LL2确定后面如果是:说明是关键字($var:keyword:)\n for(var j = this.index + matchLen - 1; j < length; j++) {\n var c = this.code.charAt(j);\n if(!S.hasOwnProperty(c)) {\n if(c == ':') {\n token.type(Token.KEYWORD);\n this.kw = true;\n }\n else {\n token.type(Token.PROPERTY);\n this.value = true;\n }\n break;\n }\n }\n }\n }\n else if(this.rule.values().hasOwnProperty(s)) {\n token.type(Token.PROPERTY);\n this.url = ['url', 'format', 'url-prefix', 'domain', 'regexp'].indexOf(s) > -1;\n }\n this.sel = false;\n this.cvar = false;\n }\n else if(this.value) {\n //value时id可以带+号,必须紧跟\n if(this.code.charAt(this.index) == '+') {\n ADD_VALUE.match(this.peek, this.code, this.index);\n token = new Token(ADD_VALUE.tokenType(), ADD_VALUE.content(), ADD_VALUE.val(), this.index - 1);\n matchLen = ADD_VALUE.content().length;\n }\n if(this.rule.colors().hasOwnProperty(s)) {\n token.type(Token.COLOR);\n this.url = false;\n this.va = false;\n }\n else if(this.rule.keyWords().hasOwnProperty(s)\n || this.rule.values().hasOwnProperty(s)) {\n token.type(Token.PROPERTY);\n this.url = ['url', 'format', 'url-prefix', 'domain', 'regexp'].indexOf(s) > -1;\n this.va = s == 'var';\n }\n this.kw = false;\n this.sel = false;\n }\n else {\n if(this.rule.keyWords().hasOwnProperty(s)) {\n token.type(Token.KEYWORD);\n this.kw = true;\n this.sel = false;\n this.parenthese = false;\n }\n else {\n var isFnCall = false;\n for(var i = this.index + s.length - 1; i < length; i++) {\n var c = this.code.charAt(i);\n if(!S.hasOwnProperty(c)) {\n isFnCall = c == '(';\n break;\n }\n }\n if(isFnCall) {\n token.type(Token.VARS);\n this.sel = false;\n }\n else {\n token.type(Token.SELECTOR);\n this.sel = true;\n }\n this.kw = false;\n }\n this.url = false;\n this.va = false;\n }\n this.number = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.PSEUDO:\n if((this.kw || this.value || this.cvar)\n && !this.page) {\n token.cancel();\n continue;\n }\n this.va = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.SELECTOR:\n if(this.value) {\n token.cancel();\n continue;\n }\n this.sel = true;\n this.kw = false;\n this.number = false;\n this.va = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.IMPORTANT:\n this.url = false;\n this.va = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.SIGN:\n this.number = false;\n switch(s) {\n case ':':\n if(this.kw) {\n this.value = true;\n }\n this.url = false;\n this.sel = false;\n this.va = false;\n break;\n case '(':\n this.parenthese = true;\n if(this.media || this.impt || this.doc) {\n this.value = false;\n }\n //fncall只会出现在block中\n else if(this.depth > 0) {\n //向前确定此(之后是fncall的param\n for(var j = this.tokenList.length - 1; j >= 2; j--) {\n var t = this.tokenList[j];\n if([Token.IGNORE, Token.BLANK, Token.LINE, Token.VIRTUAL, Token.COMMENT].indexOf(t.type()) == -1) {\n if(t.type() == Token.VARS) {\n this.param = true;\n this.parenthese = false;\n }\n break;\n }\n }\n }\n break;\n case ')':\n if(this.media || this.impt || this.doc) {\n this.value = true;\n }\n this.url = false;\n this.parenthese = false;\n this.va = false;\n //)之后可能跟单位,比如margin:(1+2)px\n this.number = true;\n this.param = false;\n break;\n case '[':\n if(!this.value) {\n //LL2确定是selector还是hack\n for(var j = this.index; j < length; j++) {\n var c = this.code.charAt(j);\n if(!S.hasOwnProperty(c)) {\n if(c == ';') {\n token.type(Token.HACK);\n this.sel = false;\n }\n break;\n }\n }\n }\n this.bracket = true;\n this.url = false;\n this.va = false;\n break;\n case ']':\n if(!this.value && !this.sel) {\n token.type(Token.HACK);\n }\n this.bracket = false;\n this.url = false;\n this.va = false;\n break;\n case ';':\n if(this.bracket && !this.sel) {\n token.type(Token.HACK);\n }\n this.value = false;\n this.impt = false;\n this.url = false;\n this.sel = false;\n this.va = false;\n this.cvar = false;\n this.extend = false;\n this.param = false;\n break;\n case '{':\n this.depth++;\n this.value = false;\n this.media = false;\n this.impt = false;\n this.url = false;\n this.sel = true;\n this.va = false;\n this.supports = false;\n this.cvar = false;\n this.extend = false;\n this.param = false;\n break;\n case '}':\n this.value = false;\n this.media = false;\n this.impt = false;\n this.url = false;\n this.sel = true;\n this.depth--;\n this.va = false;\n this.cvar = false;\n this.extend = false;\n this.param = false;\n break;\n case '*':\n if(this.cvar && !this.value) {\n token.type(Token.HACK);\n }\n else if(this.param) {\n //向前如果是(则为hack\n for(var j = this.tokenList.length - 1; j >= 2; j--) {\n var t = this.tokenList[j];\n if([Token.IGNORE, Token.BLANK, Token.LINE, Token.VIRTUAL, Token.COMMENT].indexOf(t.type()) == -1) {\n if(t.content() == '(') {\n token.type(Token.HACK);\n }\n break;\n }\n }\n }\n else if(this.depth && !this.value) {\n //LL2确定是selector还是hack\n for(var j = this.index; j < length; j++) {\n var c = this.code.charAt(j);\n if(!S.hasOwnProperty(c)) {\n if(':{,+([#>.'.indexOf(c) > -1) {\n token.type(Token.SELECTOR);\n this.sel = true;\n }\n else {\n token.type(Token.HACK);\n this.sel = false;\n }\n break;\n }\n }\n }\n else if(!this.value) {\n token.type(Token.SELECTOR);\n this.sel = true;\n }\n this.va = false;\n break;\n case '-':\n case '/':\n if(!this.value) {\n token.type(Token.HACK);\n }\n this.url = false;\n this.sel = false;\n this.va = false;\n break;\n case '~':\n if(this.sel && !this.param) {\n var last = this.tokenList[this.tokenList.length - 1];\n if(last) {\n if(last.type() == Token.SIGN && ['{', '}'].indexOf(last.content()) > -1) {\n token.type(Token.HACK);\n }\n }\n }\n else if(!this.value && ['\"', \"'\", '@', '$'].indexOf(this.code.charAt(this.index)) == -1) {\n token.type(Token.HACK);\n }\n default:\n this.url = false;\n this.va = false;\n break;\n }\n this.kw = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n break;\n case Token.NUMBER:\n this.number = true;\n this.url = false;\n this.va = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n if(this.cvar || this.param) {\n this.value = true;\n }\n break;\n case Token.STRING:\n if(this.cvar || this.param) {\n this.value = true;\n }\n break;\n case Token.VARS:\n this.sel = false;\n this.url = false;\n this.number = false;\n this.va = false;\n this.page = false;\n this.kf = false;\n this.ns = false;\n this.doc = false;\n //vardecl时作为值\n if(this.cvar) {\n this.value = true;\n }\n //非值时的$是声明\n else if(!this.value) {\n this.cvar = true;\n }\n break;\n }\n\n if(this.last) {\n token.prev(this.last);\n this.last.next(token);\n }\n this.last = token;\n temp.push(token);\n this.tokenList.push(token);\n this.index += matchLen - 1;\n token.line(this.totalLine);\n token.col(this.colNum);\n var n = character.count(token.val(), character.LINE);\n count += n;\n this.totalLine += n;\n if(n) {\n var i = match.content().indexOf(character.LINE);\n var j = match.content().lastIndexOf(character.LINE);\n this.colMax = Math.max(this.colMax, this.colNum + i);\n this.colNum = match.content().length - j;\n }\n else {\n this.colNum += matchLen;\n }\n this.colMax = Math.max(this.colMax, this.colNum);\n continue outer;\n }\n }\n //如果有未匹配的,css默认忽略,查找下一个;\n var j = this.code.indexOf(';', this.index);\n if(j == -1) {\n j = this.code.indexOf('}', this.index);\n if(j == -1) {\n j = this.code.length;\n }\n else if(this.depth) {\n j--;\n }\n }\n var s = this.code.slice(this.index - 1, ++j);\n var token = new Token(Token.IGNORE, s, this.index - 1);\n if(this.last) {\n token.prev(this.last);\n this.last.next(token);\n }\n this.last = token;\n temp.push(token);\n this.tokenList.push(token);\n token.line(this.totalLine);\n token.col(this.colNum);\n this.index = j;\n this.colNum += this.index - s.length;\n this.colMax = Math.max(this.colMax, this.colNum);\n }\n return this;\n },\n dealPt: function(temp) {\n var k = this.code.indexOf(')', this.index);\n //()未结束直接跳出\n if(k == -1) {\n var token = new Token(Token.IGNORE, this.code.slice(this.index - 1, this.code.length), this.index - 1);\n temp.push(token);\n this.tokenList.push(token);\n token.line(this.totalLine);\n token.col(this.colNum);\n this.index = this.code.length;\n var n = character.count(token.val(), character.LINE);\n if(n > 0) {\n var i = token.content().indexOf(character.LINE);\n var j = token.content().lastIndexOf(character.LINE);\n this.colMax = Math.max(this.colMax, this.colNum + i);\n this.colNum = token.content().length - j;\n }\n else {\n this.colNum += token.content().length;\n }\n this.colMax = Math.max(this.colMax, this.colNum);\n return;\n }\n var s = this.code.slice(this.index - 1, k);\n var reg = /[\\s\\r\\n]/.exec(s.trim());\n var token;\n //)之前的空白要判断\n if(reg) {\n token = new Token(Token.IGNORE, s, this.index - 1);\n }\n else {\n token = new Token(Token.STRING, s, this.index - 1);\n }\n if(this.last) {\n token.prev(this.last);\n this.last.next(token);\n }\n this.last = token;\n temp.push(token);\n this.tokenList.push(token);\n token.line(this.totalLine);\n token.col(this.colNum);\n this.index += s.length - 1;\n this.parenthese = false;\n this.url = false;\n var n = character.count(token.val(), character.LINE);\n if(n > 0) {\n var i = token.content().indexOf(character.LINE);\n var j = token.content().lastIndexOf(character.LINE);\n this.colMax = Math.max(this.colMax, this.colNum + i);\n this.colNum = token.content().length - j;\n }\n else {\n this.colNum += token.content().length;\n }\n this.colMax = Math.max(this.colMax, this.colNum);\n }\n});\n\nmodule.exports = CssLexer;","var Token = require('./Token');\n\nvar HtmlToken = Token.extend(function(type, content, val, sIndex) {\n Token.call(this, type, content, val, sIndex);\n}).statics({\n DOC: 27,\n PROPERTY: 15,\n TEXT: 25,\n MARK: 26,\n ELEM: 24\n});\n\nmodule.exports = HtmlToken;","var character = require('../util/character');\nvar Token = require('./HtmlToken');\nvar Lexer = require('./Lexer');\n\nvar RegMatch = require('./match/RegMatch');\nvar ELEM = new RegMatch(Token.ELEM, /^[a-z]\\w*(?:-\\w+)*/i);\n\nvar HtmlLexer = Lexer.extend(function(rule) {\n Lexer.call(this, rule);\n}).methods({\n init: function() {\n Lexer.prototype.init.call(this);\n this.state = false; //是否在<>状态中\n this.style = false; //style标签\n this.script = false; //script标签\n },\n scan: function(temp) {\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n if(this.state) {\n this.readch();\n // />\n if(this.peek == '/') {\n if(this.code.charAt(this.index) == '>') {\n this.state = false;\n var token = new Token(Token.MARK, this.peek + '>', this.peek + '>', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n }\n else {\n this.error('unknow html token: / ');\n }\n }\n else if(this.peek == '>') {\n this.state = false;\n var token = new Token(Token.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new Token(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n var n = character.count(token.val(), character.LINE);\n count += n;\n this.dealToken(token, matchLen, n, temp);\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n else if(this.style || this.script) {\n this.dealStSc(this.style ? 'style' : 'script', temp);\n this.style = this.script = false;\n }\n else {\n this.readch();\n var idx = this.code.indexOf('<', this.index - 1);\n if(idx == -1) {\n idx = length;\n if(this.index && idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = length;\n }\n return this;\n }\n if(this.index && idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.readch();\n }\n var s = this.code.slice(idx, idx + 4).toLowerCase();\n var c1 = this.code.charAt(idx + 1);\n var c2 = this.code.charAt(idx + 2);\n if(s == '<!--') {\n var end = this.code.indexOf('-->', this.index + 4);\n if(end == -1) {\n end = length;\n }\n else {\n end += 3;\n }\n s = this.code.slice(idx, end);\n var token = new Token(Token.COMMENT, s, s, this.index - 1);\n var n = character.count(s, character.LINE);\n this.dealToken(token, s.length, n, temp);\n }\n //</\\w\n else if(c1 == '/' && character.isLetter(c2)) {\n this.state = true;\n var token = new Token(Token.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n //<\\w\n else if(character.isLetter(c1)) {\n this.state = true;\n var token = new Token(Token.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n else if(c1 == '!') {\n this.state = true;\n var token = new Token(Token.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n }\n }\n return this;\n },\n dealStSc: function(s, temp) {\n var reg = new RegExp('^/' + s + '\\\\b');\n for(var i = this.index; i < this.code.length; i++) {\n if(this.code.charAt(i) == '<') {\n if(reg.test(this.code.slice(i + 1, i + 8))) {\n var s = this.code.slice(this.index, i);\n this.addText(s, temp);\n this.index = i;\n return;\n }\n }\n }\n var s = this.code.slice(this.index);\n this.index = this.code.length;\n this.addText(s, temp);\n },\n addText: function(s, temp) {\n var token = new Token(Token.TEXT, s, s, this.index - 1);\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, s.length, n, temp);\n },\n dealTag: function(temp) {\n ELEM.match(this.peek, this.code, this.index);\n var token = new Token(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n var matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n var s = ELEM.content().toLowerCase();\n if(s == 'style') {\n this.style = true;\n }\n else if(s == 'script') {\n this.script = true;\n }\n }\n});\nmodule.exports = HtmlLexer;","var Match = require('./Match');\nvar Token = require('../Token');\nvar character = require('../../util/character');\nvar LineSearch = Match.extend(function(type, begin, end, contain, setPReg) {\n if(character.isUndefined(contain)) {\n contain = false;\n }\n Match.call(this, type, setPReg);\n this.begin = begin;\n this.end = end;\n this.contain = contain;\n this.msg = null;\n}).methods({\n match: function(c, code, index) {\n this.msg = null;\n if(this.begin == code.substr(--index, this.begin.length)) {\n //支持多个end匹配时不支持包含选项\n if(!this.contain && Array.isArray(this.end)) {\n for(var j = 0, len = this.end.length; j < len; j++) {\n var i = code.indexOf(this.end[j], index + this.begin.length);\n if(i != -1) {\n this.result = code.slice(index, i);\n return true;\n }\n }\n //都不匹配时到末尾\n this.result = code.slice(index);\n return true;\n }\n else {\n var i = code.indexOf(this.end, index + this.begin.length);\n if(i == -1) {\n if(this.contain) {\n this.msg = 'SyntaxError: unterminated ' + Token.type(this.type).toLowerCase();\n }\n i = code.length;\n }\n else if(this.contain) {\n i += this.end.length;\n }\n this.result = code.slice(index, i);\n return true;\n }\n }\n return false;\n },\n error: function() {\n return this.msg;\n }\n});\nmodule.exports = LineSearch;","var Match = require('./Match');\nvar Token = require('../Token');\nvar character = require('../../util/character');\nvar LineParse = Match.extend(function(type, begin, end, mutiline, setPReg) {\n if(character.isUndefined(mutiline)) {\n mutiline = false;\n }\n Match.call(this, type, setPReg);\n this.begin = begin;\n this.end = end;\n this.msg = null;\n this.mutiline = mutiline;\n }).methods({\n match: function(c, code, index) {\n this.msg = null;\n if(this.begin == code.charAt(index - 1)) {\n var len = code.length,\n lastIndex = index - 1,\n res = false;\n while(index < len) {\n var c = code.charAt(index++);\n //转义\n if(c == character.BACK_SLASH) {\n if(code.charAt(index++) == character.ENTER) {\n index++;\n }\n }\n else if(c == character.LINE && !this.mutiline) {\n break;\n }\n else if(c == this.end) {\n res = true;\n break;\n }\n }\n if(!res) {\n this.msg = 'SyntaxError: unterminated ' + Token.type(this.type).toLowerCase() + ' literal';\n }\n this.result = code.slice(lastIndex, index);\n return true;\n }\n return false;\n },\n error: function() {\n return this.msg;\n },\n val: function() {\n return this.content().slice(this.begin.length, -this.end.length);\n }\n });\nmodule.exports = LineParse;","var Match = require('./Match');\nvar character = require('../../util/character');\nvar CompleteEqual = Match.extend(function(type, result, setPReg, ignoreCase) {\n Match.call(this, type, setPReg);\n this.result = result;\n this.ignoreCase = ignoreCase;\n this.temp = null;\n}).methods({\n match: function(c, code, index) {\n this.temp = code.substr(--index, this.result.length);\n return this.ignoreCase\n ? this.temp.toLowerCase() == this.result.toLowerCase()\n : this.temp == this.result;\n },\n content: function() {\n return this.temp;\n }\n});\nmodule.exports = CompleteEqual;","var Match = require('./Match');\nvar character = require('../../util/character');\nvar CharacterSet = Match.extend(function(type, str, setPReg) {\n Match.call(this, type, setPReg);\n this.str = str;\n}).methods({\n match: function(c, code, index) {\n var isIn = this.str.indexOf(c) > -1;\n if(isIn) {\n this.result = c;\n }\n return isIn;\n }\n});\nmodule.exports = CharacterSet;","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar LineParse = require('../match/LineParse');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar RegMatch = require('../match/RegMatch');\nvar CharacterSet = require('../match/CharacterSet');\nvar Token = require('../Token');\nvar Lexer = require('../Lexer');\nvar character = require('../../util/character');\nvar isProperty = false;\nvar EcmascriptRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, EcmascriptRule.KEYWORDS, true);\n\n self.addMatch(new CompleteEqual(Token.BLANK, character.BLANK));\n self.addMatch(new CompleteEqual(Token.TAB, character.TAB));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER + character.LINE));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER));\n self.addMatch(new CompleteEqual(Token.LINE, character.LINE));\n\n self.addMatch(new LineSearch(Token.COMMENT, '//', [character.ENTER + character.LINE, character.ENTER, character.LINE]));\n self.addMatch(new LineSearch(Token.COMMENT, '<!--', [character.ENTER + character.LINE, character.ENTER, character.LINE]));\n var htmlEndComment = new LineSearch(Token.COMMENT, '-->', [character.ENTER + character.LINE, character.ENTER, character.LINE]);\n htmlEndComment.callback = function(token, tokenList) {\n for(var i = tokenList.length - 1; i >= 0; i--) {\n var t = tokenList[i];\n if([Token.LINE, Token.ENTER].indexOf(t.type()) > -1) {\n return;\n }\n else if([Token.COMMENT, Token.BLANK, Token.TAB].indexOf(t.type()) == -1) {\n this.cancel = true;\n return;\n }\n }\n };\n self.addMatch(htmlEndComment);\n self.addMatch(new LineSearch(Token.COMMENT, '/*', '*/', true));\n self.addMatch(new LineParse(Token.STRING, '\"', '\"', false, Lexer.NOT_REG));\n self.addMatch(new LineParse(Token.STRING, \"'\", \"'\", false, Lexer.NOT_REG));\n\n var id = new RegMatch(Token.ID, /^[$a-zA-Z_\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0-\\u08b2\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c59\\u0c60-\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5-\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7][$\\w\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8-\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c-\\u200d\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7]*/, Lexer.SPECIAL, function() {\n return !!(self.keyWords().hasOwnProperty(this.content()));\n }, function() {\n return ['if', 'for', 'while'].indexOf(this.content()) != -1;\n });\n id.callback = function(token) {\n var s = token.content();\n if(isProperty) {\n token.type(Token.ID);\n }\n isProperty = false;\n };\n self.addMatch(id);\n\n self.addMatch(new RegMatch(Token.NUMBER, /^\\.\\d+(?:E[+-]?\\d*)?/i, {\n 'SyntaxError: missing exponent': /E[+-]?$/i\n }, Lexer.NOT_REG));\n\n self.addMatch(new CompleteEqual(Token.SIGN, ']', Lexer.NOT_REG));\n\n ['*=', '/=', '+=', '-=', '%=', '^=', '&=', '|=', '&&', '--', '++', '===', '==', '!==', '!=', '||', '>>>=', '>>>', '>>=', '<<=', '<<', '>>', '>=', '<=', '...', '=>', '**'].forEach(function(o) {\n self.addMatch(new CompleteEqual(Token.SIGN, o, Lexer.IS_REG));\n });\n var sign = new CharacterSet(Token.SIGN, ':;/?.,[{}~!^|%=-+*()~><&', Lexer.IS_REG);\n sign.callback = function(token) {\n var s = token.content();\n isProperty = s == '.';\n };\n self.addMatch(sign);\n\n self.addMatch(new RegMatch(Token.NUMBER, /^0x[\\da-f]*/i, {\n \"SyntaxError: missing hexadecimal digits after '0x'\": /^0x$/i\n }, Lexer.NOT_REG));\n self.addMatch(new RegMatch(Token.NUMBER, /^0b[01]*/i, {\n \"SyntaxError: missing binary digits after '0b'\": /^0b$/i\n }, Lexer.NOT_REG));\n self.addMatch(new RegMatch(Token.NUMBER, /^0o[01234567]*/i, {\n \"SyntaxError: missing octal digits after '0b'\": /^0o$/i\n }, Lexer.NOT_REG));\n self.addMatch(new RegMatch(Token.NUMBER, /^\\d+\\.?\\d*(?:E[+-]?\\d*)?/i, {\n 'SyntaxError: missing exponent': /E[+-]?$/i\n }, Lexer.NOT_REG));\n\n self.addMatch(new CharacterSet(Token.LINE, '\\u2028\\u2029'));\n self.addMatch(new CharacterSet(Token.BLANK, '\\f\\u000b\\u00A0\\uFEFF\\u200b\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'));\n self.addMatch(new RegMatch(Token.ANNOT, /^@[$a-zA-Z_\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e-\\u066f\\u0671-\\u06d3\\u06d5\\u06e5-\\u06e6\\u06ee-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4-\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0-\\u08b2\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc-\\u09dd\\u09df-\\u09e1\\u09f0-\\u09f1\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0-\\u0ae1\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c-\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c59\\u0c60-\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0-\\u0ce1\\u0cf1-\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32-\\u0e33\\u0e40-\\u0e46\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb0\\u0eb2-\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065-\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae-\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5-\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a-\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5-\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7][$\\w\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8-\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c-\\u200d\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7]*/));\n}).statics({\n KEYWORDS: 'await async break case catch class const continue debugger default delete do else enum export extends false finally for function if implements import in instanceof interface let new null package private protected public return static super switch this throw true try typeof var void while with yield'.split(' ')\n});\nmodule.exports = EcmascriptRule;\n","var character = require('../util/character');\nvar Token = require('./Token');\nvar Lexer = require('./Lexer');\nvar EcmascriptRule = require('./rule/EcmascriptRule');\n\nvar EcmascriptLexer = Lexer.extend(function(rule, inTemplate) {\n Lexer.call(this, rule);\n this.inTemplate = inTemplate;\n}).methods({\n init: function() {\n Lexer.prototype.init.call(this);\n },\n scan: function(temp) {\n var perlReg = this.rule.perlReg();\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n this.readch();\n //perl风格正则\n if(perlReg\n && this.isReg == Lexer.IS_REG\n && this.peek == character.SLASH\n && !{ '/': true, '*': true }[this.code.charAt(this.index)]) {\n this.dealReg(temp, length);\n this.isReg = Lexer.NOT_REG;\n }\n //template特殊语法\n else if(this.peek == character.GRAVE) {\n this.dealGrave(temp, length);\n this.isReg = Lexer.NOT_REG;\n }\n //递归解析template中的expr时结束跳出\n else if(this.inTemplate && this.peek == '}') {\n return this;\n }\n //依次遍历匹配规则,命中则继续\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new Token(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n\n if(token.type() == Token.ID\n && this.rule.keyWords().hasOwnProperty(token.content())) {\n token.type(Token.KEYWORD);\n }\n\n //回调可自定义处理匹配的token\n if(match.callback) {\n match.callback.call(match, token, this.tokenList);\n }\n //回调特殊处理忽略掉此次匹配\n if(match.cancel) {\n token.cancel();\n continue;\n }\n\n var n = character.count(token.val(), character.LINE);\n count += n;\n //处理token\n this.dealToken(token, matchLen, n, temp);\n //支持perl正则需判断关键字、圆括号对除号语义的影响\n if(perlReg && match.perlReg() != Lexer.IGNORE) {\n this.stateReg(match);\n }\n //处理{\n this.stateBrace(match.content(), token.type());\n\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n return this;\n },\n dealGrave: function(temp, length) {\n var lastIndex = this.index - 1;\n var res = false;\n var expr = false;\n var head = true;\n var tempIndex = lastIndex;\n do {\n this.readch();\n if(this.peek == character.BACK_SLASH) {\n this.index++;\n }\n else if(this.peek == character.DOLLAR) {\n this.readch();\n if(this.peek == character.LEFT_BRACE) {\n this.readch();\n expr = true;\n var token = new Token(head ? Token.TEMPLATE_HEAD : Token.TEMPLATE_MIDDLE, this.code.slice(tempIndex, --this.index), lastIndex);\n head = false;\n this.index = tempIndex + 1;\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, token.content().length, n, temp);\n var lexer = new EcmascriptLexer(new EcmascriptRule(), true);\n lexer.index = this.index;\n lexer.colNum = this.colNum;\n lexer.colMax = this.colMax;\n lexer.totalLine = this.totalLine;\n lexer.parse(this.code);\n var tokenList = lexer.tokenList;\n for(var i = 0, len = tokenList.length; i < len; i++) {\n var n = character.count(token.val(), character.LINE);\n this.dealToken(tokenList[i], token.content().length, n, temp);\n }\n tempIndex = this.index = lexer.index - 1;\n }\n }\n else if(this.peek == character.GRAVE) {\n res = true;\n break;\n }\n } while(this.index < length);\n if(!res) {\n this.error('SyntaxError: unterminated template literal',\n this.code.slice(lastIndex, this.index - 1));\n }\n var token = new Token(expr ? Token.TEMPLATE_TAIL : Token.TEMPLATE, this.code.slice(tempIndex, this.index), tempIndex);\n this.index = tempIndex + 1;\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, token.content().length, n, temp);\n }\n});\nmodule.exports = EcmascriptLexer;\n","var Token = require('./Token');\n\nvar JSXToken = Token.extend(function(type, content, val, sIndex) {\n Token.call(this, type, content, val, sIndex);\n}).statics({\n MARK: 26,\n ELEM: 24,\n PROPERTY: 15,\n TEXT: 25,\n BIND_PROPERTY: 28,\n});\n\nmodule.exports = JSXToken;","var character = require('../util/character');\nvar JSXToken = require('./JSXToken');\nvar EcmascriptLexer = require('./EcmascriptLexer');\n\nvar RegMatch = require('./match/RegMatch');\nvar CompleteEqual = require('./match/CompleteEqual');\nvar LineSearch = require('./match/LineSearch');\nvar CharacterSet = require('./match/CharacterSet');\n\nvar ELEM = new RegMatch(JSXToken.ELEM, /^[a-z]\\w*(?:-\\w+)*/i);\nvar JSXMatch = [\n new CompleteEqual(JSXToken.BLANK, character.BLANK),\n new CompleteEqual(JSXToken.TAB, character.TAB),\n new CompleteEqual(JSXToken.LINE, character.ENTER + character.LINE),\n new CompleteEqual(JSXToken.LINE, character.ENTER),\n new CompleteEqual(JSXToken.LINE, character.LINE),\n new CompleteEqual(JSXToken.SIGN, character.DECIMAL),\n new LineSearch(JSXToken.STRING, '\"', '\"', true),\n new LineSearch(JSXToken.STRING, \"'\", \"'\", true),\n new CharacterSet(JSXToken.SIGN, '=:'),\n new RegMatch(JSXToken.NUMBER, /^\\d+(?:\\.\\d*)?/),\n new RegMatch(JSXToken.BIND_PROPERTY, /^@[a-z]\\w*/i),\n new RegMatch(JSXToken.PROPERTY, /^[a-z]\\w*(?:-\\w+)*/i)\n];\n\nvar SELF_CLOSE = {\n 'img': true,\n 'meta': true,\n 'link': true,\n 'br': true,\n 'basefont': true,\n 'base': true,\n 'col': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'input': true,\n 'keygen': true,\n 'area': true,\n 'param': true,\n 'source': true,\n 'track': true\n};\n\nvar JSXLexer = EcmascriptLexer.extend(function(rule) {\n EcmascriptLexer.call(this, rule);\n}).methods({\n init: function() {\n EcmascriptLexer.prototype.init.call(this);\n this.html = false; //目前是否为解析html状态\n this.state = false; //是否在<>中\n this.hStack = []; //当mark开始时++,减少时--,以此得知jsx部分结束回归js\n this.jStack = []; //当{开始时++,}减少时--,以此得知js部分结束回归jsx\n this.aStack = []; //html和js互相递归时,记录当前层是否在attr状态中\n this.cStack = []; //html和js互相递归时,记录当前jsx标签是否是自闭合\n this.selfClose = false; //当前jsx标签是否是自闭合\n },\n scan: function(temp) {\n var perlReg = this.rule.perlReg();\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n this.readch();\n //在解析html中\n if(this.html) {\n if(this.state) {\n // />\n if(this.peek == '/') {\n if(this.code.charAt(this.index) == '>') {\n this.state = false;\n // />结束时,html深度--,如到0,说明html状态结束\n this.hStack[this.hStack.length - 1]--;\n if(this.hStack[this.hStack.length - 1] == 0) {\n this.hStack.pop();\n this.html = false;\n this.isReg = false;\n }\n var token = new JSXToken(JSXToken.MARK, this.peek + '>', this.peek + '>', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n }\n else {\n this.error('unknow jsx token: ' + this.code.charAt(this.index));\n }\n }\n //>\n else if(this.peek == '>') {\n if(this.selfClose) {\n this.error('self-close tag needs />');\n }\n this.state = false;\n //>结束时,html深度若为0,说明html状态结束,或者栈最后一个计数器为0,也结束\n if(!this.hStack.length || !this.hStack[this.hStack.length - 1]) {\n this.html = false;\n this.isReg = false;\n if(this.hStack.length) {\n this.hStack.pop();\n }\n }\n var token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n //<>和</>\n else if(this.peek == '<') {\n if(this.code.charAt(this.index) == '>') {\n var token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n else if(this.code.charAt(this.index) == '/' && this.code.charAt(this.index + 1) == '>') {\n var token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new JSXToken(JSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index += 2;\n }\n else {\n this.error('unknow jsx token: ' + this.code.charAt(this.index));\n }\n }\n //{递归进入js状态\n else if(this.peek == '{') {\n this.html = false;\n this.jStack.push(1);\n this.cStack.push(this.selfClose);\n this.aStack.push(this.state);\n var token = new JSXToken(JSXToken.SIGN, this.peek, this.peek);\n this.dealToken(token, 1, 0, temp);\n this.stateBrace(this.peek);\n }\n else {\n for(var i = 0, len = JSXMatch.length; i < len; i++) {\n var match = JSXMatch[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new JSXToken(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n var matchLen = match.content().length;\n var n = character.count(token.val(), character.LINE);\n count += n;\n this.dealToken(token, matchLen, n, temp);\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow jsx token');\n }\n }\n //<>外面\n else {\n //<之前的text部分或{}js部分\n var idx = this.code.indexOf('<', this.index - 1);\n var idx2 = this.code.indexOf('{', this.index - 1);\n //找不到<和{\n if(idx == -1 && idx2 == -1) {\n idx = length;\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = length;\n }\n return this;\n }\n //找到<\n if(idx2 == -1 || idx2 > idx) {\n var c1 = this.code.charAt(idx + 1);\n var c2 = this.code.charAt(idx + 2);\n //</\\w\n if(c1 == '/' && character.isLetter(c2)) {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]--;\n //</\n var token = new JSXToken(JSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index = idx + 2;\n this.readch();\n //\\w elem\n this.dealTag(temp, true);\n }\n //</>\n else if(c1 == '/' && c2 == '>') {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]--;\n //</\n var token = new JSXToken(JSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index = idx + 2;\n }\n //<\\w\n else if(character.isLetter(c1)) {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]++;\n //<\n var token = new JSXToken(JSXToken.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.index = idx + 1;\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n else {\n this.error();\n }\n }\n //{block\n else {\n if(idx2 > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx2), temp);\n this.readch();\n }\n this.jStack.push(1);\n this.html = false;\n var token = new JSXToken(JSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.stateBrace(this.peek);\n }\n }\n }\n //<\\w开始则jsx,<作为mark开头和识别正则/开头上下文语意相同\n else if(this.isReg == JSXLexer.IS_REG\n && this.peek == '<'\n && character.isLetter(this.code.charAt(this.index))) {\n //新的jsx开始,html深度++,html状态开始,同时为非text状态\n this.hStack.push(1);\n this.html = true;\n this.state = true;\n //<\n var token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n //<>则jsx,fragment出现\n else if(this.isReg == JSXLexer.IS_REG\n && this.peek == '<'\n && this.code.charAt(this.index) == '>') {\n //新的jsx开始,html深度++,html状态开始,同时为非text状态\n this.hStack.push(1);\n this.html = true;\n //<>\n var token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new JSXToken(JSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n //perl风格正则\n else if(perlReg\n && this.isReg == JSXLexer.IS_REG\n && this.peek == character.SLASH\n && !{ '/': true, '*': true }[this.code.charAt(this.index)]) {\n this.dealReg(temp, length);\n this.isReg = JSXLexer.NOT_REG;\n }\n //template特殊语法\n else if(this.peek == character.GRAVE) {\n this.dealGrave(temp, length);\n this.isReg = EcmascriptLexer.NOT_REG;\n }\n //递归解析template中的expr时结束跳出\n else if(this.inTemplate && this.peek == '}') {\n return this;\n }\n //依次遍历匹配规则,命中则继续\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new JSXToken(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n if(token.type() == JSXToken.ID\n && this.rule.keyWords().hasOwnProperty(token.content())) {\n token.type(JSXToken.KEYWORD);\n }\n\n //回调可自定义处理匹配的token\n if(match.callback) {\n match.callback.call(match, token, this.tokenList);\n }\n //回调特殊处理忽略掉此次匹配\n if(match.cancel) {\n token.cancel();\n continue;\n }\n\n var n = character.count(token.val(), character.LINE);\n count += n;\n //处理token\n this.dealToken(token, matchLen, n, temp);\n //支持perl正则需判断关键字、圆括号对除号语义的影响\n if(perlReg && match.perlReg() != EcmascriptLexer.IGNORE) {\n this.stateReg(match);\n }\n //处理{\n this.stateBrace(match.content(), token.type());\n this.xBrace(match.content());\n\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n return this;\n },\n addText: function(s, temp) {\n var token = new JSXToken(JSXToken.TEXT, s, s, this.index - 1);\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, s.length, n, temp);\n },\n dealTag: function(temp, end) {\n ELEM.match(this.peek, this.code, this.index);\n var token = new JSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n var matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n if(!end) {\n //自闭合没有.和:\n if(SELF_CLOSE.hasOwnProperty(token.content().toLowerCase())) {\n this.selfClose = true;\n return;\n }\n this.selfClose = false;\n }\n this.selfClose = false;\n var c = this.code.charAt(this.index);\n if(c == '.') {\n while(true) {\n this.readch();\n token = new JSXToken(JSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n if(!character.isLetter(this.peek)) {\n this.error('missing jsx identifier');\n }\n ELEM.match(this.peek, this.code, this.index);\n token = new JSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n c = this.code.charAt(this.index);\n if(c != '.') {\n break;\n }\n }\n }\n else if(c == ':') {\n while(true) {\n this.readch();\n token = new JSXToken(JSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n if(!character.isLetter(this.peek)) {\n this.error('missing jsx identifier');\n }\n ELEM.match(this.peek, this.code, this.index);\n token = new JSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n c = this.code.charAt(this.index);\n if(c != ':') {\n break;\n }\n }\n }\n },\n xBrace: function(content) {\n if(content == '{') {\n if(this.jStack.length) {\n this.jStack[this.jStack.length - 1]++;\n }\n }\n else if(content == '}') {\n if(this.jStack.length) {\n this.jStack[this.jStack.length - 1]--;\n if(this.jStack[this.jStack.length - 1] == 0) {\n this.html = true;\n this.selfClose = this.cStack.pop();\n this.state = this.aStack.pop();\n this.jStack.pop();\n }\n }\n }\n }\n}).statics({\n SELF_CLOSE: SELF_CLOSE\n});\nmodule.exports = JSXLexer;\n","var Token = require('./Token');\n\nvar CSXToken = Token.extend(function(type, content, val, sIndex) {\n Token.call(this, type, content, val, sIndex);\n}).statics({\n MARK: 26,\n ELEM: 24,\n PROPERTY: 15,\n TEXT: 25,\n BIND_PROPERTY: 28,\n});\n\nmodule.exports = CSXToken;\n","var character = require('../util/character');\nvar CSXToken = require('./CSXToken');\nvar EcmascriptLexer = require('./EcmascriptLexer');\n\nvar RegMatch = require('./match/RegMatch');\nvar CompleteEqual = require('./match/CompleteEqual');\nvar LineSearch = require('./match/LineSearch');\nvar CharacterSet = require('./match/CharacterSet');\n\nvar ELEM = new RegMatch(CSXToken.ELEM, /^[$a-z_]\\w*(?:-\\w+)*/i);\nvar CSXMatch = [\n new CompleteEqual(CSXToken.BLANK, character.BLANK),\n new CompleteEqual(CSXToken.TAB, character.TAB),\n new CompleteEqual(CSXToken.LINE, character.ENTER + character.LINE),\n new CompleteEqual(CSXToken.LINE, character.ENTER),\n new CompleteEqual(CSXToken.LINE, character.LINE),\n new CompleteEqual(CSXToken.SIGN, character.DECIMAL),\n new LineSearch(CSXToken.STRING, '\"', '\"', true),\n new LineSearch(CSXToken.STRING, \"'\", \"'\", true),\n new CharacterSet(CSXToken.SIGN, '=:'),\n new RegMatch(CSXToken.NUMBER, /^\\d+(?:\\.\\d*)?/),\n new RegMatch(CSXToken.BIND_PROPERTY, /^@[a-z]\\w*/i),\n new RegMatch(CSXToken.PROPERTY, /^[a-z]\\w*(?:-\\w+)*/i)\n];\n\nvar SELF_CLOSE = {\n 'img': true,\n 'meta': true,\n 'link': true,\n 'br': true,\n 'basefont': true,\n 'base': true,\n 'col': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'input': true,\n 'keygen': true,\n 'area': true,\n 'param': true,\n 'source': true,\n 'track': true\n};\n\nvar CSXLexer = EcmascriptLexer.extend(function(rule) {\n EcmascriptLexer.call(this, rule);\n}).methods({\n init: function() {\n EcmascriptLexer.prototype.init.call(this);\n this.html = false; //目前是否为解析html状态\n this.state = false; //是否在<>中\n this.hStack = []; //当mark开始时++,减少时--,以此得知csx部分结束回归js\n this.jStack = []; //当{开始时++,}减少时--,以此得知js部分结束回归csx\n this.aStack = []; //html和js互相递归时,记录当前层是否在attr状态中\n this.cStack = []; //html和js互相递归时,记录当前csx标签是否是自闭合\n this.selfClose = false; //当前csx标签是否是自闭合\n },\n scan: function(temp) {\n var perlReg = this.rule.perlReg();\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n this.readch();\n //在解析html中\n if(this.html) {\n if(this.state) {\n // />\n if(this.peek == '/') {\n if(this.code.charAt(this.index) == '>') {\n this.state = false;\n // />结束时,html深度--,如到0,说明html状态结束\n this.hStack[this.hStack.length - 1]--;\n if(this.hStack[this.hStack.length - 1] == 0) {\n this.hStack.pop();\n this.html = false;\n this.isReg = false;\n }\n var token = new CSXToken(CSXToken.MARK, this.peek + '>', this.peek + '>', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n }\n else {\n this.error('unknow csx token: ' + this.code.charAt(this.index));\n }\n }\n //>\n else if(this.peek == '>') {\n if(this.selfClose) {\n this.error('self-close tag needs />');\n }\n this.state = false;\n //>结束时,html深度若为0,说明html状态结束,或者栈最后一个计数器为0,也结束\n if(!this.hStack.length || !this.hStack[this.hStack.length - 1]) {\n this.html = false;\n this.isReg = false;\n if(this.hStack.length) {\n this.hStack.pop();\n }\n }\n var token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n //<>和</>\n else if(this.peek == '<') {\n if(this.code.charAt(this.index) == '>') {\n var token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n else if(this.code.charAt(this.index) == '/' && this.code.charAt(this.index + 1) == '>') {\n var token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new CSXToken(CSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index += 2;\n }\n else {\n this.error('unknow csx token: ' + this.code.charAt(this.index));\n }\n }\n //{递归进入js状态\n else if(this.peek == '{') {\n this.html = false;\n this.jStack.push(1);\n this.cStack.push(this.selfClose);\n this.aStack.push(this.state);\n var token = new CSXToken(CSXToken.SIGN, this.peek, this.peek);\n this.dealToken(token, 1, 0, temp);\n this.stateBrace(this.peek);\n }\n else {\n for(var i = 0, len = CSXMatch.length; i < len; i++) {\n var match = CSXMatch[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new CSXToken(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n var matchLen = match.content().length;\n var n = character.count(token.val(), character.LINE);\n count += n;\n this.dealToken(token, matchLen, n, temp);\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow csx token');\n }\n }\n //<>外面\n else {\n //<之前的text部分或{}js部分\n var idx = this.code.indexOf('<', this.index - 1);\n var idx2 = this.code.indexOf('{', this.index - 1);\n //找不到<和{\n if(idx == -1 && idx2 == -1) {\n idx = length;\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = length;\n }\n return this;\n }\n //找到<\n if(idx2 == -1 || idx2 > idx) {\n var c1 = this.code.charAt(idx + 1);\n var c2 = this.code.charAt(idx + 2);\n //</\\w\n if(c1 == '/' && (character.isLetter(c2) || character.DOLLAR == c2)) {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]--;\n //</\n var token = new CSXToken(CSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index = idx + 2;\n this.readch();\n //\\w elem\n this.dealTag(temp, true);\n }\n //</>\n else if(c1 == '/' && c2 == '>') {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]--;\n //</\n var token = new CSXToken(CSXToken.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.index = idx + 2;\n }\n //<\\w\n else if(character.isLetter(c1) || character.DOLLAR == c1) {\n if(idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = idx;\n }\n this.state = true;\n this.hStack[this.hStack.length - 1]++;\n //<\n var token = new CSXToken(CSXToken.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.index = idx + 1;\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n else {\n this.error();\n }\n }\n //{block\n else {\n if(idx2 > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx2), temp);\n this.readch();\n }\n this.jStack.push(1);\n this.html = false;\n var token = new CSXToken(CSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.stateBrace(this.peek);\n }\n }\n }\n //<\\w开始则csx,<作为mark开头和识别正则/开头上下文语意相同\n else if(this.isReg == CSXLexer.IS_REG\n && this.peek == '<'\n && (character.isLetter(this.code.charAt(this.index)) || character.DOLLAR == this.code.charAt(this.index))) {\n //新的csx开始,html深度++,html状态开始,同时为非text状态\n this.hStack.push(1);\n this.html = true;\n this.state = true;\n //<\n var token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n //<>则csx,fragment出现\n else if(this.isReg == CSXLexer.IS_REG\n && this.peek == '<'\n && this.code.charAt(this.index) == '>') {\n //新的csx开始,html深度++,html状态开始,同时为非text状态\n this.hStack.push(1);\n this.html = true;\n //<>\n var token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n token = new CSXToken(CSXToken.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n //perl风格正则\n else if(perlReg\n && this.isReg == CSXLexer.IS_REG\n && this.peek == character.SLASH\n && !{ '/': true, '*': true }[this.code.charAt(this.index)]) {\n this.dealReg(temp, length);\n this.isReg = CSXLexer.NOT_REG;\n }\n //template特殊语法\n else if(this.peek == character.GRAVE) {\n this.dealGrave(temp, length);\n this.isReg = EcmascriptLexer.NOT_REG;\n }\n //递归解析template中的expr时结束跳出\n else if(this.inTemplate && this.peek == '}') {\n return this;\n }\n //依次遍历匹配规则,命中则继续\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new CSXToken(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n if(token.type() == CSXToken.ID\n && this.rule.keyWords().hasOwnProperty(token.content())) {\n token.type(CSXToken.KEYWORD);\n }\n\n //回调可自定义处理匹配的token\n if(match.callback) {\n match.callback.call(match, token, this.tokenList);\n }\n //回调特殊处理忽略掉此次匹配\n if(match.cancel) {\n token.cancel();\n continue;\n }\n\n var n = character.count(token.val(), character.LINE);\n count += n;\n //处理token\n this.dealToken(token, matchLen, n, temp);\n //支持perl正则需判断关键字、圆括号对除号语义的影响\n if(perlReg && match.perlReg() != EcmascriptLexer.IGNORE) {\n this.stateReg(match);\n }\n //处理{\n this.stateBrace(match.content(), token.type());\n this.xBrace(match.content());\n\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n return this;\n },\n addText: function(s, temp) {\n var token = new CSXToken(CSXToken.TEXT, s, s, this.index - 1);\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, s.length, n, temp);\n },\n dealTag: function(temp, end) {\n ELEM.match(this.peek, this.code, this.index);\n var token = new CSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n var matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n if(!end) {\n //自闭合没有.和:\n if(SELF_CLOSE.hasOwnProperty(token.content().toLowerCase())) {\n this.selfClose = true;\n return;\n }\n this.selfClose = false;\n }\n this.selfClose = false;\n var c = this.code.charAt(this.index);\n if(c == '.') {\n while(true) {\n this.readch();\n token = new CSXToken(CSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n if(!character.isLetter(this.peek)) {\n this.error('missing csx identifier');\n }\n ELEM.match(this.peek, this.code, this.index);\n token = new CSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n c = this.code.charAt(this.index);\n if(c != '.') {\n break;\n }\n }\n }\n else if(c == ':') {\n while(true) {\n this.readch();\n token = new CSXToken(CSXToken.SIGN, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n if(!character.isLetter(this.peek)) {\n this.error('missing csx identifier');\n }\n ELEM.match(this.peek, this.code, this.index);\n token = new CSXToken(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n c = this.code.charAt(this.index);\n if(c != ':') {\n break;\n }\n }\n }\n },\n xBrace: function(content) {\n if(content == '{') {\n if(this.jStack.length) {\n this.jStack[this.jStack.length - 1]++;\n }\n }\n else if(content == '}') {\n if(this.jStack.length) {\n this.jStack[this.jStack.length - 1]--;\n if(this.jStack[this.jStack.length - 1] == 0) {\n this.html = true;\n this.selfClose = this.cStack.pop();\n this.state = this.aStack.pop();\n this.jStack.pop();\n }\n }\n }\n }\n}).statics({\n SELF_CLOSE: SELF_CLOSE\n});\nmodule.exports = CSXLexer;\n","var Token = require('./Token');\n\nvar AxmlToken = Token.extend(function(type, content, val, sIndex) {\n Token.call(this, type, content, val, sIndex);\n}).statics({\n DOC: 27,\n PROPERTY: 15,\n TEXT: 25,\n MARK: 26,\n ELEM: 24\n});\n\nmodule.exports = AxmlToken;\n","var character = require('../util/character');\nvar Token = require('./AxmlToken');\nvar Lexer = require('./Lexer');\n\nvar RegMatch = require('./match/RegMatch');\nvar ELEM = new RegMatch(Token.ELEM, /^[a-z]\\w*(?:-\\w+)*/i);\n\nvar AxmlLexer = Lexer.extend(function(rule) {\n Lexer.call(this, rule);\n}).methods({\n init: function() {\n Lexer.prototype.init.call(this);\n this.state = false; //是否在<>状态中\n this.style = false; //style标签\n this.script = false; //script标签\n },\n scan: function(temp) {\n var length = this.code.length;\n var count = 0;\n this.colNum = length ? 1 : 0;\n outer:\n while(this.index < length) {\n if(this.cacheLine > 0 && count >= this.cacheLine) {\n break;\n }\n if(this.state) {\n this.readch();\n // />\n if(this.peek == '/') {\n if(this.code.charAt(this.index) == '>') {\n this.state = false;\n var token = new Token(Token.MARK, this.peek + '>', this.peek + '>', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n }\n else {\n this.error('unknow html token: / ');\n }\n }\n else if(this.peek == '>') {\n this.state = false;\n var token = new Token(Token.MARK, this.peek, this.peek, this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n else {\n for(var i = 0, matches = this.rule.matches(), len = matches.length; i < len; i++) {\n var match = matches[i];\n if(match.match(this.peek, this.code, this.index)) {\n var token = new Token(match.tokenType(), match.content(), match.val(), this.index - 1);\n var error = match.error();\n var matchLen = match.content().length;\n if(error) {\n this.error(error, this.code.slice(this.index - matchLen, this.index));\n }\n var n = character.count(token.val(), character.LINE);\n count += n;\n this.dealToken(token, matchLen, n, temp);\n continue outer;\n }\n }\n //如果有未匹配的,说明规则不完整,抛出错误\n this.error('unknow token');\n }\n }\n else if(this.style || this.script) {\n this.dealStSc(this.style ? 'style' : 'script', temp);\n this.style = this.script = false;\n }\n else {\n this.readch();\n var idx = this.code.indexOf('<', this.index - 1);\n if(idx == -1) {\n idx = length;\n if(this.index && idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.index = length;\n }\n return this;\n }\n if(this.index && idx > this.index - 1) {\n this.addText(this.code.slice(this.index - 1, idx), temp);\n this.readch();\n }\n var s = this.code.slice(idx, idx + 4).toLowerCase();\n var c1 = this.code.charAt(idx + 1);\n var c2 = this.code.charAt(idx + 2);\n if(s == '<!--') {\n var end = this.code.indexOf('-->', this.index + 4);\n if(end == -1) {\n end = length;\n }\n else {\n end += 3;\n }\n s = this.code.slice(idx, end);\n var token = new Token(Token.COMMENT, s, s, this.index - 1);\n var n = character.count(s, character.LINE);\n this.dealToken(token, s.length, n, temp);\n }\n //</\\w\n else if(c1 == '/' && character.isLetter(c2)) {\n this.state = true;\n var token = new Token(Token.MARK, '</', '</', this.index - 1);\n this.dealToken(token, 2, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n //<\\w\n else if(character.isLetter(c1)) {\n this.state = true;\n var token = new Token(Token.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n this.readch();\n //\\w elem\n this.dealTag(temp);\n }\n else if(c1 == '!') {\n this.state = true;\n var token = new Token(Token.MARK, '<', '<', this.index - 1);\n this.dealToken(token, 1, 0, temp);\n }\n }\n }\n return this;\n },\n dealStSc: function(s, temp) {\n var reg = new RegExp('^/' + s + '\\\\b');\n for(var i = this.index; i < this.code.length; i++) {\n if(this.code.charAt(i) == '<') {\n if(reg.test(this.code.slice(i + 1, i + 8))) {\n var s = this.code.slice(this.index, i);\n this.addText(s, temp);\n this.index = i;\n return;\n }\n }\n }\n var s = this.code.slice(this.index);\n this.index = this.code.length;\n this.addText(s, temp);\n },\n addText: function(s, temp) {\n var token = new Token(Token.TEXT, s, s, this.index - 1);\n var n = character.count(token.val(), character.LINE);\n this.dealToken(token, s.length, n, temp);\n },\n dealTag: function(temp) {\n ELEM.match(this.peek, this.code, this.index);\n var token = new Token(ELEM.tokenType(), ELEM.content(), ELEM.val(), this.index - 1);\n var matchLen = ELEM.content().length;\n this.dealToken(token, matchLen, 0, temp);\n var s = ELEM.content().toLowerCase();\n if(s == 'style') {\n this.style = true;\n }\n else if(s == 'script') {\n this.script = true;\n }\n }\n});\nmodule.exports = AxmlLexer;\n","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar LineParse = require('../match/LineParse');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar CharacterSet = require('../match/CharacterSet');\nvar RegMatch = require('../match/RegMatch');\nvar Token = require('../CssToken');\nvar character = require('../../util/character');\nvar CssRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, CssRule.KEYWORDS);\n\n self.vl = {};\n CssRule.VALUES.forEach(function(o) {\n self.vl[o] = true;\n });\n\n self.cl = {};\n CssRule.COLORS.forEach(function(o) {\n self.cl[o] = true;\n });\n\n self.addMatch(new CompleteEqual(Token.BLANK, character.BLANK));\n self.addMatch(new CompleteEqual(Token.TAB, character.TAB));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER + character.LINE));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER));\n self.addMatch(new CompleteEqual(Token.LINE, character.LINE));\n\n self.addMatch(new LineSearch(Token.COMMENT, '//', [character.ENTER + character.LINE, character.ENTER, character.LINE]));\n self.addMatch(new LineSearch(Token.COMMENT, '/*', '*/', true));\n self.addMatch(new LineParse(Token.STRING, '\"', '\"', false));\n self.addMatch(new LineParse(Token.STRING, \"'\", \"'\", false));\n\n self.addMatch(new RegMatch(Token.NUMBER, /^[+-]?\\d+\\.?\\d*/i));\n self.addMatch(new RegMatch(Token.NUMBER, /^[+-]?\\.\\d+/i));\n self.addMatch(new CompleteEqual(Token.UNITS, '%', null, true));\n\n self.addMatch(new CompleteEqual(Token.HACK, '\\\\9\\\\0'));\n self.addMatch(new CompleteEqual(Token.HACK, '\\\\0/'));\n self.addMatch(new CompleteEqual(Token.HACK, '\\\\0'));\n self.addMatch(new CompleteEqual(Token.HACK, '\\\\9'));\n self.addMatch(new CompleteEqual(Token.HACK, '\\\\,'));\n self.addMatch(new CompleteEqual(Token.HACK, '-vx-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-hp-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-khtml-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, 'mso-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-prince-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-rim-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-ro-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-tc-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-wap-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-apple-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-atsc-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-ah-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-moz-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-webkit-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-ms-'), null, true);\n self.addMatch(new CompleteEqual(Token.HACK, '-o-'), null, true);\n\n self.addMatch(new RegMatch(Token.COLOR, /^#[\\da-f]{3,6}/i));\n self.addMatch(new RegMatch(Token.SELECTOR, /^\\.[a-z_][\\w_\\-]*/i));\n self.addMatch(new RegMatch(Token.SELECTOR, /^#\\w[\\w\\-]*/i));\n self.addMatch(new CompleteEqual(Token.SELECTOR, '&'));\n self.addMatch(new RegMatch(Token.VARS, /^var-[\\w\\-]+/i));\n self.addMatch(new RegMatch(Token.VARS, /^--[\\w\\-]+/i));\n self.addMatch(new CompleteEqual(Token.KEYWORD, 'min--moz-device-pixel-ratio'));\n self.addMatch(new CompleteEqual(Token.KEYWORD, 'max--moz-device-pixel-ratio'));\n self.addMatch(new RegMatch(Token.ID, /^[a-z][\\w\\-]*/i));\n self.addMatch(new RegMatch(Token.STRING, /^(\\\\[a-z\\d]{4})+/i));\n self.addMatch(new RegMatch(Token.IMPORTANT, /^!\\s*important/i));\n self.addMatch(new RegMatch(Token.HACK, /^![a-z]+/i));\n self.addMatch(new RegMatch(Token.PSEUDO, /^::?(?:-(?:moz|webkit|ms|o)-)?[a-z]+(?:-[a-z]+)*/i));\n ['$=', '|=', '*=', '~=', '^=', '>=', '<=', '!=', '==', '++', '--'].forEach(function(o) {\n self.addMatch(new CompleteEqual(Token.SIGN, o));\n });\n\n var head = new RegMatch(Token.HEAD, /^@[\\w-]+/);\n head.callback = function(token) {\n var s = token.content().toLowerCase();\n s = s.replace(/^@(-moz-|-o-|-ms-|-webkit-|-vx-|-hp-|-khtml-|mso-|-prince-|-rim-|-ro-|-tc-|-wap-|-apple-|-atsc-|-ah-)/, '@');\n if(!{\n '@page': true,\n '@import': true,\n '@charset': true,\n '@media': true,\n '@font-face': true,\n '@keyframes': true,\n '@namespace': true,\n '@document': true,\n '@counter-style': true,\n '@viewport': true,\n '@supports': true,\n '@region': true,\n '@navigation': true,\n '@footnote': true,\n '@layout': true,\n '@top': true,\n '@top-left': true,\n '@top-center': true,\n '@top-right': true,\n '@extend': true,\n '@if': true,\n '@elseif': true,\n '@else': true,\n '@for': true,\n '@dir': true,\n '@basename': true,\n '@extname': true,\n '@width': true,\n '@height': true\n }.hasOwnProperty(s)) {\n token.type(Token.VARS);\n }\n };\n self.addMatch(head);\n\n self.addMatch(new RegMatch(Token.VARS, /^@\\{[\\w\\-\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8-\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c-\\u200d\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7]+\\}/));\n self.addMatch(new RegMatch(Token.VARS, /^\\$[\\w\\-\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8-\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c-\\u200d\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7]+/));\n self.addMatch(new RegMatch(Token.VARS, /^\\$\\{[\\w\\-\\u00aa\\u00b5\\u00ba\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376-\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0966-\\u096f\\u0971-\\u0983\\u0985-\\u098c\\u098f-\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7-\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc-\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f-\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32-\\u0a33\\u0a35-\\u0a36\\u0a38-\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2-\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f-\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32-\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47-\\u0b48\\u0b4b-\\u0b4d\\u0b56-\\u0b57\\u0b5c-\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82-\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99-\\u0b9a\\u0b9c\\u0b9e-\\u0b9f\\u0ba3-\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c58-\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5-\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1-\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82-\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2-\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81-\\u0e82\\u0e84\\u0e87-\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa-\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18-\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772-\\u1773\\u1780-\\u17d3\\u17d7\\u17dc-\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1ab0-\\u1abd\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8-\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c-\\u200d\\u203f-\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099-\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0-\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\ua9e0-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64-\\uab65\\uabc0-\\uabea\\uabec-\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe33-\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7]+\\}/));\n\n self.addMatch(new CharacterSet(Token.SIGN, '{},:();-{}><+/[]=*~.'));\n self.addMatch(new CharacterSet(Token.HACK, '_`?|%'));\n}).methods({\n values: function() {\n return this.vl;\n },\n colors: function() {\n return this.cl;\n },\n addValue: function(v) {\n this.vl[v] = true;\n return this.vl;\n },\n addColor: function(v) {\n this.cl[v] = true;\n return this.cl;\n }\n}).statics({\n KEYWORDS: 'handler-blocked transform-3d -replace -set-link-source -use-link-source accelerator additive-symbols align-content align-items align-self alignment-adjust alignment-baseline anchor-point animation animation-delay animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function app-region appearance ascent aspect-ratio autohiding-scrollbar azimuth backface-visibility background background-attachment background-clip background-color background-image background-origin background-origin-x background-origin-y background-position background-position-x background-position-y background-repeat background-size baseline baseline-shift behavior binding blend-mode block-progression bookmark-label bookmark-level bookmark-state bookmark-target border border-after border-after-color border-after-style border-after-width border-before border-before-color border-before-style border-before-width border-bottom border-bottom-color border-bottom-colors border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-clip-bottom border-clip-left border-clip-right border-clip-top border-collapse border-color border-fit border-horizontal-spacing border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-left border-left-color border-left-colors border-left-style border-left-width border-radius border-radius-bottomleft border-radius-bottomright border-radius-topleft border-radius-topright border-right border-right-color border-right-colors border-right-style border-right-width border-spacing border-start border-start-color border-start-style border-start-width border-style border-top border-top-color border-top-colors border-top-left-radius border-top-right-radius border-top-style border-top-width border-vertical-spacing border-width bottom bottom-left-radius bottom-right-radius box box-align box-decoration-break box-direction box-flex box-flex-group box-lines box-ordinal-group box-orient box-pack box-reflect box-shadow box-sizing box-snap break-after break-before break-inside cap-height caption-side centerline chains clear clip clip-path clip-rule color color-correction color-index color-profile column-axis column-break-after column-break-before column-break-inside column-count column-fill column-gap column-progression column-rule column-rule-color column-rule-style column-rule-width column-span column-width columns content content-zoom-chaining content-zoom-limit content-zoom-limit-max content-zoom-limit-min content-zoom-snap content-zoom-snap-points content-zoom-snap-type content-zooming counter-increment counter-reset cue cue-after cue-before cursor dashboard-region definition-src descent device-aspect-ratio device-height device-pixel-ratio device-width direction display display-box display-extras display-inside display-outside dominant-baseline drop-initial-after-adjust drop-initial-after-align drop-initial-before-adjust drop-initial-before-align drop-initial-size drop-initial-value elevation empty-cells fallback fill fill-opacity fill-rule filter fit fit-position flavor flex flex-basis flex-direction flex-flow flex-grow flex-pack flex-shrink flex-wrap float float-edge float-offset flood-color flood-opacity flow-from flow-into focus-ring-color font font-color font-emphasize font-emphasize-position font-emphasize-style font-family font-feature-settings font-kerning font-language-override font-size font-size-adjust font-size-delta font-smooth font-smoothing font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight footnote force-broken-image-icon glyph-orientation-horizontal glyph-orientation-vertical grid grid-area grid-auto-columns grid-auto-flow grid-auto-rows grid-column grid-column-align grid-column-position grid-column-span grid-columns grid-definition-columns grid-definition-rows grid-position grid-row grid-row-align grid-row-position grid-row-span grid-rows grid-span grid-template hanging-punctuation height high-contrast high-contrast-adjust highlight horiz-align hyphenate-character hyphenate-limit-after hyphenate-limit-before hyphenate-limit-chars hyphenate-limit-last hyphenate-limit-lines hyphenate-limit-zone hyphenate-resource hyphens icon image-orientation image-rendering image-resolution images-in-menus ime-mode include-source inherit initial inline-box-align inline-flex inline-table input-format input-required interpolation-mode interpret-as justify-content justify-items justify-self kerning languages layer-background-color layer-background-image layout-flow layout-grid layout-grid-char layout-grid-char-spacing layout-grid-line layout-grid-mode layout-grid-type left letter-spacing lighting-color line-align line-box-contain line-break line-clamp line-grid line-height line-slack line-snap line-stacking line-stacking-ruby line-stacking-shift line-stacking-strategy linear-gradient link link-source list-image-1 list-image-2 list-image-3 list-style list-style-image list-style-position list-style-type locale logical-height logical-width mac-graphite-theme maemo-classic margin margin-after margin-after-collapse margin-before margin-before-collapse margin-bottom margin-bottom-collapse margin-collapse margin-end margin-left margin-right margin-start margin-top margin-top-collapse marker marker-end marker-mid marker-offset marker-start marks marquee marquee-dir marquee-direction marquee-increment marquee-loop marquee-play-count marquee-repetition marquee-speed marquee-style mask mask-attachment mask-box-image mask-box-image-outset mask-box-image-repeat mask-box-image-slice mask-box-image-source mask-box-image-width mask-clip mask-composite mask-image mask-origin mask-position mask-position-x mask-position-y mask-repeat mask-repeat-x mask-repeat-y mask-size mask-type match-nearest-mail-blockquote-color mathline max-aspect-ratio max-color max-color-index max-device-aspect-ratio max-device-height max-device-pixel-ratio max-device-width max-height max-logical-height max-logical-width max-monochrome max-resolution max-width max-zoom min-aspect-ratio min-color min-color-index min-device-aspect-ratio min-device-height min-device-pixel-ratio min-device-width min-height min-logical-height min-logical-width min-monochrome min-resolution min-width min-zoom mini-fold monochrome move-to nav-banner-image nav-bottom nav-down nav-down-shift nav-index nav-left nav-left-shift nav-right nav-right-shift nav-up nav-up-shift navbutton-* nbsp-mode negative none normal object-fit object-position oeb-column-number oeb-page-foot oeb-page-head opacity order orient orientation orphans osx-font-smoothing outline outline-color outline-offset outline-radius outline-radius-bottomleft outline-radius-bottomright outline-radius-topleft outline-radius-topright outline-style outline-width overflow overflow-scrolling overflow-style overflow-x overflow-y pad padding padding-bottom padding-left padding-right padding-top page page-break-after page-break-before page-break-inside page-policy panose-1 pause pause-after pause-before perspective perspective-origin perspective-origin-x perspective-origin-y phonemes pitch pitch-range play-during pointer-events position prefix presentation-level print-color-adjust progress-appearance property-name punctuation-trim punctuation-wrap quotes radial-gradient range region-break-after region-break-before region-break-inside region-overflow rendering-intent replace resize resolution rest rest-after rest-before richness right rotation-point row-span rtl-ordering ruby-align ruby-overhang ruby-position ruby-span scan script-level script-min-size script-size-multiplier scroll-chaining scroll-limit scroll-limit-x-max scroll-limit-x-min scroll-limit-y-max scroll-limit-y-min scroll-rails scroll-snap-points-x scroll-snap-points-y scroll-snap-type scroll-snap-x scroll-snap-y scroll-translation scrollbar-3d-light-color scrollbar-3dlight-color scrollbar-arrow-color scrollbar-base-color scrollbar-dark-shadow-color scrollbar-darkshadow-color scrollbar-end-backward scrollbar-end-forward scrollbar-face-color scrollbar-highlight-color scrollbar-shadow-color scrollbar-start-backward scrollbar-start-forward scrollbar-thumb-proportional scrollbar-track-color separator-image set-link-source shape-image-threshold shape-inside shape-margin shape-outside shape-padding shape-rendering size slope speak speak-as speak-header speak-numeral speak-punctuation speech-rate src stack-sizing stemh stemv stop-color stop-opacity stress string-set stroke stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width suffix svg-shadow symbols system tab-size tab-stops table-baseline table-border-color-dark table-border-color-light table-layout tap-highlight-color target target-name target-new target-position text-align text-align-last text-anchor text-autospace text-blink text-combine text-combine-horizontal text-decoration text-decoration-color text-decoration-line text-decoration-skip text-decoration-style text-decorations-in-effect text-effect text-emphasis text-emphasis-color text-emphasis-position text-emphasis-skip text-emphasis-style text-fill-color text-fit text-height text-indent text-justify text-justify-trim text-kashida text-kashida-space text-line-through text-orientation text-outline text-overflow text-rendering text-security text-shadow text-size-adjust text-space-collapse text-spacing text-stroke text-stroke-color text-stroke-width text-transform text-trim text-underline text-underline-color text-underline-position text-underline-style text-wrap top top-bar-button top-left-radius top-right-radius touch-action touch-callout touch-enabled transform transform-origin transform-origin-x transform-origin-y transform-origin-z transform-style transition transition-delay transition-duration transition-property transition-repeat-count transition-timing-function unicode-bidi unicode-range units-per-em use-link-source user-drag user-focus user-input user-modify user-select user-zoom vector-effect version vertical-align viewport visibility voice-balance voice-duration voice-family voice-pitch voice-pitch-range voice-range voice-rate voice-stress voice-volume volume white-space widows width widths will-change window-shadow windows-classic windows-compositor windows-default-theme word-break word-spacing word-wrap wrap wrap-flow wrap-margin wrap-padding wrap-through writing-mode x-height z-index zoom'.split(' '),\n VALUES: 'domain regexp farthest-corner closest-side closest-corner farthest-side above absolute additive all alpha alphabetic always and antialiased aqua armenian attr aural auto avoid background baseline behind below bicubic bidi-override black blink block blue bold bolder border-box both bottom braille break-all break-word calc canvas capitalize caption center center-left center-right circle cjk-decimal cjk-ideographic close-quote code collapse color compact condensed contain content-box continuous counter counters cover crop cross cross-fade crosshair cubic-bezier cursive cycle cyclic dashed decimal decimal-leading-zero default device-cmyk digits disabled disc disclosure-closed disclosure-open dotted double e-resize ease ease-in ease-in-out ease-out element embed embossed enabled expanded extra-condensed extra-expanded false fantasy far-left far-right fast faster fixed flipouttobottom flipouttoleft flipouttoright flipouttotop format fuchsia georgian gray grayscale green groove handheld hebrew help hidden hide high higher hiragana hiragana-iroha hsl hsla icon image image-rect image-region infinite inherit inline inline-block inline-table inset inside inter-ideograph invert italic japanese-formal japanese-informal justify katakana katakana-iroha korean-hangul-formal korean-hanja-formal korean-hanja-informal landscape large larger leader left-side leftwards level lighter lime line-through linear linear-gradient list-item local loud low lower lower-alpha lower-greek lower-latin lower-roman lowercase ltr marker maroon medium message-box middle min max mix move n-resize narrower navy ne-resize no-close-quote no-open-quote no-repeat none normal not nowrap numeric nw-resize oblique olive once only opacity open-quote outset outside overline padding-box pending perspective pointer portrait pre print projection purple rebeccapurple rect red relative repeat repeat-x repeat-y repeating-linear-gradient repeating-radial-gradient rgb rgba ridge right right-side rightwards rotate rotate3d rotate3D rotateX rotateY rotateZ round rounddown roundup rtl run-in running s-resize scale scale3D scale3d scaleX scaleY scaleZ screen scroll se-resize semi-condensed semi-expanded separate show silent silver simp-chinese-formal simp-chinese-informal skew skew3D skewX skewY skewZ slow slower small small-caps small-caption smaller soft solid space speech spell-out square static status-bar steps string sub super sw-resize symbolic symbols table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group target-counter target-counters target-pull target-text teal text text-bottom text-top thick thin toggle top trad-chinese-formal trad-chinese-informal translate translate3d translate3D translateX translateY translateZ true tty tv ultra-condensed ultra-expanded underline upper-alpha upper-latin upper-roman uppercase url url-prefix var visible w-resize wait white wider width x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow'.split(' '),\n COLORS: 'transparent activeborder aliceblue antiquewhite appworkspace aqua aqua aquamarine azure beige bisque black black blanchedalmond blue blue blueviolet brown burlywood buttonface buttonshadow cadetblue captiontext chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick floralwhite forestgreen fuchsia fuchsia gainsboro ghostwhite gold goldenrod gray gray green green greenyellow grey highlight honeydew hotpink inactiveborder inactivecaptiontext indianred indigo infotext ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue lightyellow lime lime limegreen linen magenta maroon maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred menutext midnightblue mintcream mistyrose moccasin navajowhite navy navy oldlace olive olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple purple red red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver silver skyblue slateblue slategray slategrey snow springgreen steelblue tan teal teal thistle threeddarkshadow threedhighlight threedshadow tomato turquoise violet wheat white white whitesmoke windowframe yellow yellow yellowgreen'.split(' '),\n addKeyWord: function(kw) {\n if(Array.isArray(kw)) {\n CssRule.KEYWORDS = CssRule.KEYWORDS.concat(kw);\n }\n else {\n CssRule.KEYWORDS.push(kw.trim());\n }\n },\n addValue: function(v) {\n if(Array.isArray(v)) {\n CssRule.VALUES = CssRule.VALUES.concat(v);\n }\n else {\n CssRule.VALUES.push(v.trim());\n }\n },\n addColor: function(v) {\n if(Array.isArray(v)) {\n CssRule.COLORS = CssRule.COLORS.concat(v);\n }\n else {\n CssRule.COLORS.push(v.trim());\n }\n }\n});\nmodule.exports = CssRule;","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar LineParse = require('../match/LineParse');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar RegMatch = require('../match/RegMatch');\nvar Token = require('../Token');\nvar JavaRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, JavaRule.KEYWORDS);\n \n self.addMatch(new LineSearch(Token.COMMENT, '//', '\\n'));\n self.addMatch(new LineSearch(Token.COMMENT, '/*', '*/', true));\n self.addMatch(new LineParse(Token.STRING, '\"', '\"'));\n self.addMatch(new LineParse(Token.STRING, \"'\", \"'\"));\n self.addMatch(new RegMatch(Token.ID, /^[a-zA-Z_]\\w*/));\n self.addMatch(new RegMatch(Token.ANNOT, /^@\\w+/));\n\n ['~', '!', '%', '^', '&&', '&', '*', '(', ')', '--', '-', '++', '+', '===', '==', '=', '!==', '!=', '[', ']', '{', '}', '||', '|', '\\\\', '<<<', '>>>', '<<', '>>', '<', '>', '>=', '<=', ',', '...', '.', '?:', '?', ':', ';', '/'].forEach(function(o) {\n self.addMatch(new CompleteEqual(Token.SIGN, o));\n });\n }).statics({\n KEYWORDS: 'if else for break case continue function true false switch default do while int float double long throws transient abstract assert boolean byte class const enum instanceof try volatilechar extends final finally goto implements import protected return void char interface native new package private protected throw short public return strictfp super synchronized this static null String'.split(' ')\n });\nmodule.exports = JavaRule;","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar RegMatch = require('../match/RegMatch');\nvar LineParse = require('../match/LineParse');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar Token = require('../Token');\nvar CRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, CRule.KEYWORDS);\n \n self.addMatch(new LineSearch(Token.COMMENT, '//', '\\n'));\n self.addMatch(new LineSearch(Token.COMMENT, '/*', '*/', true));\n self.addMatch(new LineParse(Token.STRING, '\"', '\"'));\n self.addMatch(new LineParse(Token.STRING, \"'\", \"'\"));\n self.addMatch(new RegMatch(Token.ID, /^[a-zA-Z_]\\w*/));\n self.addMatch(new RegMatch(Token.HEAD, /^#\\w+/));\n\n ['~', '!', '%', '^', '&&', '&', '*', '(', ')', '--', '-', '++', '+', '===', '==', '=', '!==', '!=', '[', ']', '{', '}', '||', '|', '\\\\', '<<<', '>>>', '<<', '>>', '<', '>', '>=', '<=', ',', '...', '.', '?:', '?', ':', ';', '/'].forEach(function(o) {\n self.addMatch(new CompleteEqual(Token.SIGN, o));\n });\n }).statics({\n KEYWORDS: 'if else for break case continue function true false switch default do while int float double long const_cast private short char return void static null whcar_t volatile uuid explicit extern class const __finally __exception __try virtual using signed namespace new public protected __declspec delete unsigned friend goto inline mutable deprecated dllexport dllimport dynamic_cast enum union bool naked typeid noinline noreturn nothrow register this reinterpret_cast selectany sizeof static_cast struct template thread throw try typedef typename'.split(' ')\n });\nmodule.exports = CRule;","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar RegMatch = require('../match/RegMatch');\nvar character = require('../../util/character');\nvar Token = require('../HtmlToken');\nvar HtmlRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, HtmlRule.KEYWORDS);\n\n self.addMatch(new CompleteEqual(Token.BLANK, character.BLANK));\n self.addMatch(new CompleteEqual(Token.TAB, character.TAB));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER + character.LINE));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER));\n self.addMatch(new CompleteEqual(Token.LINE, character.LINE));\n\n self.addMatch(new CompleteEqual(Token.DOC, '!DOCTYPE', null, true));\n self.addMatch(new LineSearch(Token.STRING, '\"', '\"', true));\n self.addMatch(new LineSearch(Token.STRING, \"'\", \"'\", true));\n self.addMatch(new CompleteEqual(Token.SIGN, '=', null, true));\n self.addMatch(new RegMatch(Token.NUMBER, /^\\d+/));\n self.addMatch(new RegMatch(Token.PROPERTY, /^[a-z]+(-\\w+)*/i));\n}).statics({\n KEYWORDS: 'doctype a abbr acronym address applet area article aside audio b base basefont bdi bdo big blockquote body br button canvas caption center cite code col colgroup command datalist dd del details dfn dialog dir div dl dt em embed fieldset figcaption figure font footer form frame frameset h1 h2 h3 h4 h5 h6 head header hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noframes noscript object ol optgroup option output p param pre progress q rp rt ruby s samp script section select small source span strike strong style sub summary sup table tbody td textarea tfoot th thead time title tr track tt u ul var video wbr'.split(' ')\n});\nmodule.exports = HtmlRule;","var Rule = require('./Rule');\nvar LineSearch = require('../match/LineSearch');\nvar CompleteEqual = require('../match/CompleteEqual');\nvar RegMatch = require('../match/RegMatch');\nvar character = require('../../util/character');\nvar Token = require('../AxmlToken');\nvar AxmlRule = Rule.extend(function() {\n var self = this;\n Rule.call(self, AxmlRule.KEYWORDS);\n\n self.addMatch(new CompleteEqual(Token.BLANK, character.BLANK));\n self.addMatch(new CompleteEqual(Token.TAB, character.TAB));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER + character.LINE));\n self.addMatch(new CompleteEqual(Token.LINE, character.ENTER));\n self.addMatch(new CompleteEqual(Token.LINE, character.LINE));\n\n self.addMatch(new CompleteEqual(Token.DOC, '!DOCTYPE', null, true));\n self.addMatch(new LineSearch(Token.STRING, '\"', '\"', true));\n self.addMatch(new LineSearch(Token.STRING, \"'\", \"'\", true));\n self.addMatch(new CompleteEqual(Token.SIGN, '=', null, true));\n self.addMatch(new RegMatch(Token.NUMBER, /^\\d+/));\n self.addMatch(new RegMatch(Token.PROPERTY, /^[a-z]+:[a-z]+/i));\n self.addMatch(new RegMatch(Token.PROPERTY, /^[a-z]+(-\\w+)*/i));\n}).statics({\n KEYWORDS: []\n});\nmodule.exports = AxmlRule;\n","var Class = require('../util/Class');\nvar walk = require('../util/walk');\nvar Parser = Class(function(lexer) {\n this.lexer = lexer;\n this.tree = {};\n this.ignores = {};\n return this;\n}).methods({\n parse: function(code) {\n return this.tree;\n },\n ast: function(plainObject) {\n if(plainObject) {\n return walk.plainObject(this.tree);\n }\n return this.tree;\n },\n ignore: function() {\n return this.ignores;\n }\n});\nmodule.exports = Parser;","var Class = require('../util/Class');\nvar character = require('../util/character');\nvar nid = 0;\nvar Node = Class(function(type, children) {\n this.type = type;\n if(type == Node.TOKEN) {\n this.children = children;\n }\n else if(Array.isArray(children)) {\n this.children = children;\n }\n else {\n this.children = children ? [children] : [];\n }\n this.p = null;\n this.pr = null;\n this.ne = null;\n this.id = nid++;\n return this;\n}).methods({\n nid: function() {\n return this.id;\n },\n name: function(t) {\n if(!character.isUndefined(t)) {\n this.type = t;\n }\n return this.type;\n },\n leaves: function() {\n return this.children;\n },\n leaf: function(i) {\n return this.children[i];\n },\n size: function() {\n return this.children.length;\n },\n first: function() {\n return this.leaf(0);\n },\n last: function() {\n return this.leaf(this.size() - 1);\n },\n isEmpty: function() {\n return this.size() === 0;\n },\n add: function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments, 0);\n args.forEach(function(node) {\n if(Array.isArray(node)) {\n node.forEach(function(node2) {\n node2.parent(self);\n var last = self.children[self.children.length - 1];\n if(last) {\n last.next(node2);\n node2.prev(last);\n }\n self.children.push(node2);\n });\n }\n else {\n node.parent(self);\n var last = self.children[self.children.length - 1];\n if(last) {\n last.next(node);\n node.prev(last);\n }\n self.children.push(node);\n }\n });\n return self;\n },\n addFirst: function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments, 0);\n args.forEach(function(node) {\n if(Array.isArray(node)) {\n node.forEach(function(node2) {\n node2.parent(self);\n var last = self.children[0];\n if(last) {\n last.next(node2);\n node2.prev(last);\n }\n self.children.unshift(node2);\n });\n }\n else {\n node.parent(self);\n var last = self.children[0];\n if(last) {\n last.next(node);\n node.prev(last);\n }\n self.children.unshift(node);\n }\n });\n return self;\n },\n token: function() {\n return this.children;\n },\n parent: function(p) {\n if(p) {\n this.p = p;\n }\n return this.p;\n },\n prev: function(pr) {\n if(pr) {\n this.pr = pr;\n }\n return this.pr;\n },\n next: function(ne) {\n if(ne) {\n this.ne = ne;\n }\n return this.ne;\n },\n isToken: function() {\n return this.type == Node.TOKEN;\n },\n toString: function() {\n return this.name();\n }\n}).statics({\n TOKEN: 'token'\n});\nmodule.exports = Node;","var INode = require('../Node');\nvar Node = INode.extend(function(type, children) {\n INode.call(this, type, children);\n return this;\n}).statics({\n PROGRAM: 'program',\n ELEM: 'elem',\n VARSTMT: 'varstmt',\n VARDECL: 'vardecl',\n FNBODY: 'fnbody',\n BLOCK: 'block',\n ITERSTMT: 'iterstmt',\n FNPARAMS: 'fnparams',\n EXPR: 'expr',\n STMT: 'stmt',\n ASSIGN: 'assign',\n EMPTSTMT: 'emptstmt',\n IFSTMT: 'ifstmt',\n CNTNSTMT: 'cntnstmt',\n BRKSTMT: 'brkstmt',\n RETSTMT: 'retstmt',\n WITHSTMT: 'withstmt',\n SWCHSTMT: 'swchstmt',\n CASEBLOCK: 'caseblock',\n CASECLAUSE: 'caseclause',\n DFTCLAUSE: 'dftclause',\n LABSTMT: 'labstmt',\n THRSTMT: 'thrstmt',\n TRYSTMT: 'trystmt',\n DEBSTMT: 'debstmt',\n EXPRSTMT: 'exprstmt',\n CACH: 'cach',\n FINL: 'finl',\n FNDECL: 'fndecl',\n FNEXPR: 'fnexpr',\n ASSIGNEXPR: 'assignexpr',\n CNDTEXPR: 'cndtexpr',\n LOGOREXPR: 'logorexpr',\n LOGANDEXPR: 'logandexpr',\n BITOREXPR: 'bitorexpr',\n BITANDEXPR: 'bitandexpr',\n BITXOREXPR: 'bitxorexpr',\n EQEXPR: 'eqexpr',\n RELTEXPR: 'reltexpr',\n SHIFTEXPR: 'shiftexpr',\n ADDEXPR: 'addexpr',\n MTPLEXPR: 'mtplexpr',\n UNARYEXPR: 'unaryexpr',\n MMBEXPR: 'mmbexpr',\n PRMREXPR: 'prmrexpr',\n ARRLTR: 'arrltr',\n OBJLTR: 'objltr',\n PROPTASSIGN: 'proptassign',\n ARGS: 'args',\n ARGLIST: 'arglist',\n POSTFIXEXPR: 'postfixexpr',\n NEWEXPR: 'newexpr',\n CALLEXPR: 'callexpr',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;\n","var IParser = require('../Parser');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/Lexer');\nvar Rule = require('../../lexer/rule/EcmascriptRule');\nvar Token = require('../../lexer/Token');\nvar Node = require('./Node');\nvar S = {};\nS[Token.BLANK] = S[Token.TAB] = S[Token.COMMENT] = S[Token.LINE] = S[Token.ENTER] = true;\nvar NOASSIGN = {};\nNOASSIGN[Node.CNDTEXPR]\n = NOASSIGN[Node.LOGOREXPR]\n = NOASSIGN[Node.LOGANDEXPR]\n = NOASSIGN[Node.BITOREXPR]\n = NOASSIGN[Node.BITXOREXPR]\n = NOASSIGN[Node.BITANDEXPR]\n = NOASSIGN[Node.EQEXPR]\n = NOASSIGN[Node.RELTEXPR]\n = NOASSIGN[Node.SHIFTEXPR]\n = NOASSIGN[Node.ADDEXPR]\n = NOASSIGN[Node.MTPLEXPR]\n = NOASSIGN[Node.UNARYEXPR]\n = NOASSIGN[Node.POSTFIXEXPR]\n = true;\nvar Parser = IParser.extend(function(lexer) {\n IParser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n parse: function(code) {\n this.lexer.parse(code);\n this.tree = this.program();\n return this.tree;\n },\n init: function(lexer) {\n this.look = null;\n this.tokens = null;\n this.lastLine = 1;\n this.lastCol = 1;\n this.line = 1;\n this.col = 1;\n this.index = 0;\n this.length = 0;\n this.ignores = {};\n this.hasMoveLine = false;\n this.tree = {};\n if(lexer) {\n this.lexer = lexer;\n }\n else if(this.lexer) {\n this.lexer.init();\n }\n else {\n this.lexer = new Lexer(new Rule());\n }\n },\n program: function() {\n this.tokens = this.lexer.tokens();\n this.length = this.tokens.length;\n if(this.tokens.length) {\n this.move();\n }\n var node = new Node(Node.PROGRAM);\n while(this.look) {\n node.add(this.element());\n }\n return node;\n },\n element: function() {\n if(this.look.content() == 'function') {\n return this.fndecl();\n }\n else {\n return this.stmt();\n }\n },\n stmt: function() {\n if(!this.look) {\n this.error();\n }\n switch(this.look.content()) {\n case 'var':\n return this.varstmt();\n case '{':\n return this.block();\n case ';':\n return this.emptstmt();\n case 'if':\n return this.ifstmt();\n case 'do':\n case 'while':\n case 'for':\n return this.iterstmt();\n case 'continue':\n return this.cntnstmt();\n case 'break':\n return this.brkstmt();\n case 'return':\n return this.retstmt();\n case 'with':\n return this.withstmt();\n case 'switch':\n return this.swchstmt();\n case 'throw':\n return this.thrstmt();\n case 'try':\n return this.trystmt();\n case 'debugger':\n return this.debstmt();\n default:\n if(this.look.type() == Token.ID) {\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n if(token.content() == ':') {\n return this.labstmt();\n }\n else {\n return this.exprstmt();\n }\n }\n }\n }\n return this.exprstmt();\n }\n },\n exprstmt: function() {\n var node = new Node(Node.EXPRSTMT);\n node.add(this.expr(), this.match(';'));\n return node;\n },\n varstmt: function(noSem) {\n var node = new Node(Node.VARSTMT);\n node.add(\n this.match('var'),\n this.vardecl()\n );\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.vardecl()\n );\n }\n if(!noSem) {\n node.add(this.match(';'));\n }\n return node;\n },\n vardecl: function() {\n var node = new Node(Node.VARDECL);\n if(!this.look) {\n this.error('missing variable name');\n }\n node.add(this.match(Token.ID, 'missing variable name'));\n if(this.look && this.look.content() == '=') {\n node.add(this.assign());\n }\n return node;\n },\n assign: function() {\n var node = new Node(Node.ASSIGN);\n node.add(this.match('='));\n if(!this.look) {\n this.error();\n }\n node.add(this.assignexpr());\n return node;\n },\n block: function() {\n var node = new Node(Node.BLOCK);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.stmt());\n }\n node.add(this.match('}', 'missing } in compound statement'));\n return node;\n },\n emptstmt: function() {\n var node = new Node(Node.EMPTSTMT);\n node.add(this.match(';'));\n return node;\n },\n ifstmt: function() {\n var node = new Node(Node.IFSTMT);\n node.add(\n this.match('if'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.stmt()\n );\n if(this.look && this.look.content() == 'else') {\n node.add(\n this.match('else'),\n this.stmt()\n );\n }\n return node;\n },\n iterstmt: function() {\n var node = new Node(Node.ITERSTMT);\n switch(this.look.content()) {\n case 'do':\n node.add(\n this.match(),\n this.stmt(),\n this.match('while'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.match(';')\n );\n break;\n case 'while':\n node.add(\n this.match(),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.stmt()\n );\n break;\n case 'for':\n node.add(\n this.match(),\n this.match('(')\n );\n if(!this.look) {\n this.error();\n }\n //当前是var/let/const的话,LL3确定是for(var vardecllist;或for(var vardecl in\n if(this.look.content() == 'var') {\n var node2 = this.varstmt(true);\n if(!this.look) {\n this.error('missing ; after for-loop initializer');\n }\n if(this.look.content() == 'in') {\n if(node2.size() > 2) {\n this.error('invalid for/in left-hand side');\n }\n node.add(node2);\n node.add(\n this.match(),\n this.expr()\n );\n }\n else {\n node.add(node2);\n node.add(this.match(';'));\n if(this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.expr());\n }\n }\n }\n else {\n if(this.look.content() == 'in') {\n this.error();\n }\n //for(EXPRnoin;) or for(leftexpr in\n var expr;\n if(this.look.content() != ';') {\n expr = this.expr(true);\n node.add(expr);\n }\n if(!this.look) {\n this.error('missing ;');\n }\n if(this.look.content() == 'in') {\n if(expr.name() == Node.MMBEXPR\n || expr.name() == Node.PRMREXPR\n || expr.name() == Node.NEWEXPR) {\n node.add(\n this.match(),\n this.expr()\n );\n }\n else {\n this.error('invalid for/in left-hand side');\n }\n }\n else {\n //for的;不能省略,强制判断\n node.add(this.match(';', 'missing ;'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';', 'missing ;'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.expr());\n }\n }\n }\n node.add(this.match(')'));\n node.add(this.stmt());\n }\n return node;\n },\n cntnstmt: function() {\n var node = new Node(Node.CNTNSTMT);\n node.add(this.match('continue', true));\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n node.add(this.match(';'));\n return node;\n },\n brkstmt: function() {\n var node = new Node(Node.BRKSTMT);\n node.add(this.match('break', true));\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n node.add(this.match(';'));\n return node;\n },\n retstmt: function() {\n var node = new Node(Node.RETSTMT);\n node.add(this.match('return', true));\n //return后换行视作省略;,包括多行注释的换行\n if(this.look) {\n if(this.look.content() == ';'\n || this.look.content() == '}'\n || this.look.type() == Token.LINE\n || this.look.type() == Token.COMMENT) {\n node.add(this.match(';'));\n }\n else {\n node.add(this.expr(), this.match(';'));\n }\n }\n else {\n node.add(this.match(';'));\n }\n return node;\n },\n withstmt: function() {\n var node = new Node(Node.WITHSTMT);\n node.add(\n this.match('with'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.stmt()\n );\n return node;\n },\n swchstmt: function() {\n var node = new Node(Node.SWCHSTMT);\n node.add(\n this.match('switch'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.caseblock()\n );\n return node;\n },\n caseblock: function() {\n var node = new Node(Node.CASEBLOCK);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n if(this.look.content() == 'case') {\n node.add(this.caseclause());\n }\n else if(this.look.content() == 'default') {\n node.add(this.dftclause());\n }\n else {\n this.error('invalid switch statement');\n }\n }\n node.add(this.match('}'));\n return node;\n },\n caseclause: function() {\n var node = new Node(Node.CASECLAUSE);\n node.add(\n this.match('case'),\n this.expr(),\n this.match(':')\n );\n while(this.look\n && this.look.content() != 'case'\n && this.look.content() != 'default'\n && this.look.content() != '}') {\n node.add(this.stmt());\n }\n return node;\n },\n dftclause: function() {\n var node = new Node(Node.DFTCLAUSE);\n node.add(\n this.match('default'),\n this.match(':')\n );\n while(this.look && this.look.content() == 'case') {\n node.add(\n this.match('case'),\n this.expr(),\n this.match(':')\n );\n }\n while(this.look && this.look.content() != '}') {\n node.add(this.stmt());\n }\n return node;\n },\n labstmt: function() {\n var node = new Node(Node.LABSTMT);\n node.add(\n this.match(Token.ID),\n this.match(':'),\n this.stmt()\n );\n return node;\n },\n thrstmt: function() {\n var node = new Node(Node.THRSTMT);\n node.add(\n this.match('throw', true),\n this.expr(),\n this.match(';')\n );\n return node;\n },\n trystmt: function() {\n var node = new Node(Node.TRYSTMT);\n node.add(\n this.match('try'),\n this.block()\n );\n if(this.look && this.look.content() == 'catch') {\n node.add(this.cach());\n if(this.look && this.look.content() == 'finally') {\n node.add(this.finl());\n }\n }\n else {\n node.add(this.finl());\n }\n return node;\n },\n debstmt: function() {\n var node = new Node(Node.DEBSTMT);\n node.add(this.match('debugger'), this.match(';'));\n return node;\n },\n cach: function() {\n var node = new Node(Node.CACH);\n node.add(\n this.match('catch'),\n this.match('('),\n this.match(Token.ID, 'missing identifier in catch'),\n this.match(')'),\n this.block()\n );\n return node;\n },\n finl: function() {\n var node = new Node(Node.FINL);\n node.add(\n this.match('finally'),\n this.block()\n );\n return node;\n },\n fndecl: function() {\n var node = new Node(Node.FNDECL);\n node.add(\n this.match('function'),\n this.match(Token.ID, 'function statement requires a name'),\n this.match('(')\n );\n if(!this.look) {\n this.error('missing formal parameter');\n }\n if(this.look.content() != ')') {\n node.add(this.fnparams());\n }\n node.add(\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}')\n );\n return node;\n },\n fnexpr: function(noIn) {\n var node = new Node(Node.FNEXPR);\n node.add(this.match('function'));\n if(!this.look) {\n this.error('missing formal parameter');\n }\n if(this.look.type() == Token.ID) {\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n node.add(this.match());\n }\n node.add(this.match('('));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.fnparams());\n }\n node.add(\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } in compound statement')\n );\n return node;\n },\n fnparams: function() {\n var node = new Node(Node.FNPARAMS);\n while(this.look) {\n node.add(this.match(Token.ID, 'missing formal parameter'));\n if(this.look) {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n else if(this.look.content() == ')') {\n break;\n }\n }\n }\n return node;\n },\n fnbody: function() {\n var node = new Node(Node.FNBODY);\n while(this.look && this.look.content() != '}') {\n node.add(this.element());\n }\n return node;\n },\n expr: function(noIn) {\n var node = new Node(Node.EXPR),\n assignexpr = this.assignexpr(noIn);\n if(this.look && this.look.content() == ',') {\n node.add(assignexpr);\n while(this.look && this.look.content() == ',') {\n node.add(this.match(), this.assignexpr(noIn));\n }\n }\n else {\n return assignexpr;\n }\n return node;\n },\n assignexpr: function(noIn) {\n var node = new Node(Node.ASSIGNEXPR);\n var cndt = this.cndtexpr(noIn);\n if(this.look && {\n '*=': true,\n '/=': true,\n '%=': true,\n '+=': true,\n '-=': true,\n '<<=': true,\n '>>=': true,\n '>>>=': true,\n '&=': true,\n '^=': true,\n '|=': true,\n '=': true\n }.hasOwnProperty(this.look.content()) && !NOASSIGN.hasOwnProperty(cndt.name())) {\n node.add(cndt, this.match(), this.assignexpr(noIn));\n }\n else {\n return cndt;\n }\n return node;\n },\n cndtexpr: function(noIn) {\n var node = new Node(Node.CNDTEXPR),\n logorexpr = this.logorexpr(noIn);\n if(this.look && this.look.content() == '?') {\n node.add(\n logorexpr,\n this.match(),\n this.assignexpr(noIn),\n this.match(':'),\n this.assignexpr(noIn)\n );\n }\n else {\n return logorexpr;\n }\n return node;\n },\n logorexpr: function(noIn) {\n var node = new Node(Node.LOGOREXPR),\n logandexpr = this.logandexpr(noIn);\n if(this.look && this.look.content() == '||') {\n node.add(logandexpr);\n while(this.look && this.look.content() == '||') {\n node.add(\n this.match(),\n this.logandexpr(noIn)\n );\n }\n }\n else {\n return logandexpr;\n }\n return node;\n },\n logandexpr: function(noIn) {\n var node = new Node(Node.LOGANDEXPR),\n bitorexpr = this.bitorexpr(noIn);\n if(this.look && this.look.content() == '&&') {\n node.add(bitorexpr);\n while(this.look && this.look.content() == '&&') {\n node.add(\n this.match(),\n this.bitorexpr(noIn)\n );\n }\n }\n else {\n return bitorexpr;\n }\n return node;\n },\n bitorexpr: function(noIn) {\n var node = new Node(Node.BITOREXPR),\n bitxorexpr = this.bitxorexpr(noIn);\n if(this.look && this.look.content() == '|') {\n node.add(bitxorexpr);\n while(this.look && this.look.content() == '|') {\n node.add(\n this.match(),\n this.bitxorexpr(noIn)\n );\n }\n }\n else {\n return bitxorexpr;\n }\n return node;\n },\n bitxorexpr: function(noIn) {\n var node = new Node(Node.BITXOREXPR),\n bitandexpr = this.bitandexpr(noIn);\n if(this.look && this.look.content() == '^') {\n node.add(bitandexpr);\n while(this.look && this.look.content() == '^') {\n node.add(\n this.match(),\n this.bitandexpr(noIn)\n );\n }\n }\n else {\n return bitandexpr;\n }\n return node;\n },\n bitandexpr: function(noIn) {\n var node = new Node(Node.BITANDEXPR),\n eqexpr = this.eqexpr(noIn);\n if(this.look && this.look.content() == '&') {\n node.add(eqexpr);\n while(this.look && this.look.content() == '&') {\n node.add(\n this.match(),\n this.eqexpr(noIn)\n );\n }\n }\n else {\n return eqexpr;\n }\n return node;\n },\n eqexpr: function(noIn) {\n var node = new Node(Node.EQEXPR),\n reltexpr = this.reltexpr(noIn);\n if(this.look && {\n '==': true,\n '===': true,\n '!==': true,\n '!=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(reltexpr);\n while(this.look && {\n '==': true,\n '===': true,\n '!==': true,\n '!=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n this.match(),\n this.reltexpr(noIn)\n );\n }\n }\n else {\n return reltexpr;\n }\n return node;\n },\n reltexpr: function(noIn) {\n var node = new Node(Node.RELTEXPR),\n shiftexpr = this.shiftexpr(noIn);\n if(this.look && ({\n '<': true,\n '>': true,\n '>=': true,\n '<=': true,\n 'instanceof': true\n }.hasOwnProperty(this.look.content()) || (!noIn && this.look.content() == 'in'))) {\n node.add(shiftexpr);\n while(this.look && ({\n '<': true,\n '>': true,\n '>=': true,\n '<=': true,\n 'instanceof': true\n }.hasOwnProperty(this.look.content()) || (!noIn && this.look.content() == 'in'))) {\n node.add(\n this.match(),\n this.shiftexpr(noIn)\n );\n }\n }\n else {\n return shiftexpr;\n }\n return node;\n },\n shiftexpr: function(noIn) {\n var node = new Node(Node.SHIFTEXPR),\n addexpr = this.addexpr(noIn);\n if(this.look && ['<<', '>>', '>>>'].indexOf(this.look.content()) != -1) {\n node.add(addexpr);\n while(this.look && ['<<', '>>', '>>>'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.addexpr(noIn)\n );\n }\n }\n else {\n return addexpr;\n }\n return node;\n },\n addexpr: function(noIn) {\n var node = new Node(Node.ADDEXPR),\n mtplexpr = this.mtplexpr(noIn);\n if(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(mtplexpr);\n while(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.mtplexpr(noIn)\n );\n }\n }\n else {\n return mtplexpr;\n }\n return node;\n },\n mtplexpr: function(noIn) {\n var node = new Node(Node.MTPLEXPR),\n unaryexpr = this.unaryexpr(noIn);\n if(this.look && ['*', '/', '%'].indexOf(this.look.content()) != -1) {\n node.add(unaryexpr);\n while(this.look && ['*', '/', '%'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.unaryexpr(noIn)\n );\n }\n }\n else {\n return unaryexpr;\n }\n return node;\n },\n unaryexpr: function(noIn) {\n var node = new Node(Node.UNARYEXPR);\n if(!this.look) {\n this.error();\n }\n switch(this.look.content()) {\n case '++':\n case '--':\n node.add(\n this.match(),\n this.leftexpr(noIn)\n );\n break;\n case 'delete':\n case 'void':\n case 'typeof':\n case '+':\n case '-':\n case '~':\n case '!':\n node.add(\n this.match(),\n this.unaryexpr(noIn)\n );\n break;\n default:\n return this.postfixexpr(noIn);\n }\n return node;\n },\n postfixexpr: function(noIn) {\n var node = new Node(Node.POSTFIXEXPR);\n var leftexpr = this.leftexpr(noIn);\n if(this.look && ['++', '--'].indexOf(this.look.content()) > -1 && !this.hasMoveLine) {\n node.add(\n leftexpr,\n this.match()\n );\n }\n else {\n return leftexpr;\n }\n return node;\n },\n leftexpr: function(noIn) {\n if(this.look.content() == 'new') {\n return this.newexpr(0, noIn);\n }\n else {\n return this.callexpr(null, noIn);\n }\n },\n newexpr: function(depth, noIn) {\n depth = depth || 0;\n var node = new Node(Node.NEWEXPR);\n node.add(this.match('new'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == 'new') {\n node.add(this.newexpr(depth + 1, noIn));\n }\n else {\n node.add(this.mmbexpr(noIn));\n }\n if(this.look && this.look.content() == '(') {\n node.add(this.args());\n }\n if(this.look && ['.', '['].indexOf(this.look.content()) > -1) {\n var mmb = new Node(Node.MMBEXPR);\n mmb.add(node);\n while(this.look) {\n if(this.look.content() == '.') {\n mmb.add(\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n }\n else if(this.look.content() == '[') {\n mmb.add(\n this.match(),\n this.expr(noIn),\n this.match(']')\n );\n }\n else {\n break;\n }\n }\n if(depth == 0 && this.look && this.look.content() == '(') {\n var callexpr = this.callexpr(mmb, noIn);\n return callexpr;\n }\n return mmb;\n }\n return node;\n },\n callexpr: function(mmb, noIn) {\n var node = new Node(Node.CALLEXPR);\n mmb = mmb || this.mmbexpr(noIn);\n if(this.look && this.look.content() == '(') {\n node.add(\n mmb,\n this.args()\n );\n while(this.look) {\n var temp;\n if(this.look.content() == '.') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n node = temp;\n }\n else if(this.look.content() == '[') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.expr(noIn),\n this.match(']')\n );\n node = temp;\n }\n else if(this.look.content() == '(') {\n temp = new Node(Node.CALLEXPR);\n temp.add(\n node,\n this.args()\n );\n node = temp;\n }\n else {\n break;\n }\n }\n }\n else {\n return mmb;\n }\n return node;\n },\n mmbexpr: function(noIn) {\n var node = new Node(Node.MMBEXPR);\n var mmb;\n if(this.look.content() == 'function') {\n mmb = this.fnexpr(noIn);\n }\n else {\n mmb = this.prmrexpr(noIn);\n }\n if(this.look && ['.', '['].indexOf(this.look.content()) > -1) {\n node.add(mmb);\n if(this.look.content() == '.') {\n node.add(\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n )\n }\n else {\n node.add(\n this.match(),\n this.expr(noIn),\n this.match(']')\n );\n }\n while(this.look) {\n var temp;\n if(this.look.content() == '.') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n node = temp;\n }\n else if(this.look.content() == '[') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.expr(noIn),\n this.match(']')\n );\n node = temp;\n }\n else {\n break;\n }\n }\n }\n else {\n return mmb;\n }\n return node;\n },\n prmrexpr: function(noIn) {\n var node = new Node(Node.PRMREXPR);\n switch(this.look.type()) {\n case Token.ID:\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n case Token.NUMBER:\n case Token.STRING:\n case Token.REG:\n case Token.TEMPLATE:\n node.add(this.match());\n break;\n default:\n switch(this.look.content()) {\n case 'this':\n case 'null':\n case 'true':\n case 'false':\n node.add(this.match());\n break;\n case '(':\n node.add(this.match(), this.expr(), this.match(')'));\n break;\n case '[':\n node.add(this.arrltr());\n break;\n case '{':\n node.add(this.objltr());\n break;\n default:\n this.error();\n }\n }\n return node;\n },\n arrltr: function() {\n var node = new Node(Node.ARRLTR);\n node.add(this.match('['));\n while(this.look && this.look.content() != ']') {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n else {\n node.add(this.assignexpr());\n }\n }\n node.add(this.match(']', 'missing ] after element list'));\n return node;\n },\n objltr: function() {\n var node = new Node(Node.OBJLTR);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.proptassign());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match('}', 'missing } after property list'));\n return node;\n },\n proptassign: function() {\n var node = new Node(Node.PROPTASSIGN);\n switch(this.look.type()) {\n case Token.ID:\n if(this.look.content() == 'get') {\n node.add(this.match());\n if(!this.look) {\n this.error('missing : after property id');\n }\n if(this.look.type() == Token.ID || this.look.type() == Token.KEYWORD) {\n node.add(\n this.match(),\n this.match('(', 'missing ( before formal parameters'),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n }\n else {\n node.add(\n this.match(':', 'missing : after property id'),\n this.assignexpr()\n );\n }\n break;\n }\n else if(this.look.content() == 'set') {\n node.add(this.match());\n if(!this.look) {\n this.error('missing : after property id');\n }\n if(this.look.type() == Token.ID || this.look.type() == Token.KEYWORD) {\n node.add(\n this.match(),\n this.match('(', 'missing ( before formal parameters'),\n this.match(Token.ID, 'setter functions must have one argument'),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n }\n else {\n node.add(\n this.match(':', 'missing : after property id'),\n this.assignexpr()\n );\n }\n break;\n }\n case Token.STRING:\n case Token.NUMBER:\n case Token.KEYWORD:\n node.add(\n this.match(),\n this.match(':', 'missing : after property id'),\n this.assignexpr()\n );\n break;\n default:\n this.error('invalid property id');\n }\n return node;\n },\n args: function() {\n var node = new Node(Node.ARGS);\n node.add(this.match('('));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.arglist());\n }\n node.add(this.match(')'));\n return node;\n },\n arglist: function() {\n var node = new Node(Node.ARGLIST);\n while(this.look) {\n node.add(this.assignexpr());\n if(this.look) {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n else if(this.look.content() == ')') {\n break;\n }\n }\n }\n return node;\n },\n virtual: function(s) {\n return new Node(Node.TOKEN, new Token(Token.VIRTUAL, s));\n },\n match: function(type, line, msg) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && this.hasMoveLine)\n || this.look.content() == '}')\n ) {\n if(this.look && S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n },\n move: function(line) {\n this.lastLine = this.line;\n this.lastCol = this.col;\n //遗留下来的换行符\n this.hasMoveLine = false;\n do {\n this.look = this.tokens[this.index++];\n if(!this.look) {\n return;\n }\n //存下忽略的token\n if(S[this.look.type()]) {\n this.ignores[this.index - 1] = this.look;\n }\n //包括line的情况下要跳出\n if(this.look.type() == Token.LINE) {\n this.line++;\n this.col = 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n else if(this.look.type() == Token.COMMENT) {\n var s = this.look.content();\n var n = character.count(this.look.content(), character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n }\n else {\n this.col += this.look.content().length;\n if(!S[this.look.type()]) {\n break;\n }\n }\n } while(this.index <= this.length);\n },\n error: function(msg) {\n msg = 'SyntaxError: ' + (msg || ' syntax error');\n throw new Error(msg + ' line ' + this.lastLine + ' col ' + this.lastCol);\n }\n});\nmodule.exports = Parser;","var INode = require('../Node');\nvar Node = INode.extend(function(type, children) {\n INode.call(this, type, children);\n return this;\n}).statics({\n SCRIPT: 'script',\n SCRIPTBODY: 'scriptbody',\n VARSTMT: 'varstmt',\n VARDECL: 'vardecl',\n FNBODY: 'fnbody',\n BLOCKSTMT: 'blockstmt',\n BLOCK: 'block',\n ITERSTMT: 'iterstmt',\n FNPARAMS: 'fnparams',\n RESTPARAM: 'restparam',\n EXPR: 'expr',\n STMT: 'stmt',\n ASSIGN: 'assign',\n EMPTSTMT: 'emptstmt',\n IFSTMT: 'ifstmt',\n CNTNSTMT: 'cntnstmt',\n BRKSTMT: 'brkstmt',\n RETSTMT: 'retstmt',\n WITHSTMT: 'withstmt',\n SWCHSTMT: 'swchstmt',\n CASEBLOCK: 'caseblock',\n CASECLAUSE: 'caseclause',\n DFTCLAUSE: 'dftclause',\n LABSTMT: 'labstmt',\n THRSTMT: 'thrstmt',\n TRYSTMT: 'trystmt',\n DEBSTMT: 'debstmt',\n EXPRSTMT: 'exprstmt',\n CACH: 'cach',\n CACHPARAM: 'cachparam',\n FINL: 'finl',\n FNDECL: 'fndecl',\n FNEXPR: 'fnexpr',\n ASSIGNEXPR: 'assignexpr',\n CNDTEXPR: 'cndtexpr',\n LOGOREXPR: 'logorexpr',\n LOGANDEXPR: 'logandexpr',\n BITOREXPR: 'bitorexpr',\n BITANDEXPR: 'bitandexpr',\n BITXOREXPR: 'bitxorexpr',\n EQEXPR: 'eqexpr',\n RELTEXPR: 'reltexpr',\n SHIFTEXPR: 'shiftexpr',\n ADDEXPR: 'addexpr',\n MTPLEXPR: 'mtplexpr',\n UNARYEXPR: 'unaryexpr',\n MMBEXPR: 'mmbexpr',\n PRMREXPR: 'prmrexpr',\n ARRLTR: 'arrltr',\n OBJLTR: 'objltr',\n PROPTDEF: 'proptdef',\n ARGS: 'args',\n ARGLIST: 'arglist',\n IMPTSTMT: 'imptstmt',\n POSTFIXEXPR: 'postfixexpr',\n NEWEXPR: 'newexpr',\n CALLEXPR: 'callexpr',\n SPREAD: 'spread',\n ARRCMPH: 'arrcmph',\n CMPHFOR: 'cmphfor',\n INITLZ: 'initlz',\n BINDID: 'bindid',\n ARRBINDPAT: 'arrbindpat',\n OBJBINDPAT: 'objbindpat',\n BINDELEM: 'bindelem',\n BINDREST: 'bindrest',\n PROPTNAME: 'proptname',\n SINGLENAME: 'singlename',\n BINDPROPT: 'bindpropt',\n LTRPROPT: 'ltrpropt',\n CMPTPROPT: 'cmptpropt',\n LEXDECL: 'lexdecl',\n LEXBIND: 'lexbind',\n FMPARAMS: 'fmparams',\n CMPHIF: 'cmphif',\n YIELDEXPR: 'yieldexpr',\n ARROWFN: 'arrowfn',\n ARROWPARAMS: 'arrowparams',\n CPEAPL: 'cpeapl',\n CLASSEXPR: 'classexpr',\n GENEXPR: 'genexpr',\n GENDECL: 'gendecl',\n GENCMPH: 'gencmph',\n CMPH: 'cmph',\n CNCSBODY: 'cncsbody',\n CLASSDECL: 'classdecl',\n HERITAGE: 'heritage',\n CLASSBODY: 'classbody',\n CLASSELEM: 'classelem',\n METHOD: 'method',\n GENMETHOD: 'genmethod',\n MODULEBODY: 'moduelbody',\n IMPORT: 'import',\n EXPORT: 'export',\n IMPORTDECL: 'importdecl',\n MODULEIMPORT: 'moduleimport',\n FROMCAULSE: 'formcaulse',\n IMPORTCAULSE: 'importcaulse',\n NAMEIMPORT: 'nameimport',\n IMPORTSPEC: 'importspec',\n EXPORTDECL: 'exportdecl',\n EXPORTCAULSE: 'exportcaulse',\n EXPORTSPEC: 'exportspec',\n ANNOT: 'annot',\n TEMPLATE: 'template',\n ASYNCDECL: 'asyncdecl',\n ASYNCARROWFN: 'asyncarrowfn',\n ASYNCEXPR: 'asyncexpr',\n ASYNCMETHOD: 'asyncmethod',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;","var IParser = require('../Parser');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/EcmascriptLexer');\nvar Rule = require('../../lexer/rule/EcmascriptRule');\nvar Token = require('../../lexer/Token');\nvar Node = require('./Node');\nvar S = {};\nS[Token.BLANK] = S[Token.TAB] = S[Token.COMMENT] = S[Token.LINE] = S[Token.ENTER] = true;\nvar NOASSIGN = {};\nNOASSIGN[Node.CNDTEXPR]\n = NOASSIGN[Node.LOGOREXPR]\n = NOASSIGN[Node.LOGANDEXPR]\n = NOASSIGN[Node.BITOREXPR]\n = NOASSIGN[Node.BITXOREXPR]\n = NOASSIGN[Node.BITANDEXPR]\n = NOASSIGN[Node.EQEXPR]\n = NOASSIGN[Node.RELTEXPR]\n = NOASSIGN[Node.SHIFTEXPR]\n = NOASSIGN[Node.ADDEXPR]\n = NOASSIGN[Node.MTPLEXPR]\n = NOASSIGN[Node.UNARYEXPR]\n = NOASSIGN[Node.POSTFIXEXPR]\n = true;\nvar Parser = IParser.extend(function(lexer) {\n IParser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n parse: function(code) {\n this.lexer.parse(code);\n this.tree = this.script();\n return this.tree;\n },\n init: function(lexer) {\n this.look = null;\n this.tokens = null;\n this.lastLine = 1;\n this.lastCol = 1;\n this.line = 1;\n this.col = 1;\n this.index = 0;\n this.length = 0;\n this.ignores = {};\n this.hasMoveLine = false;\n this.module = false;\n this.tree = {};\n if(lexer) {\n this.lexer = lexer;\n }\n else if(this.lexer) {\n this.lexer.init();\n }\n else {\n this.lexer = new Lexer(new Rule());\n }\n },\n script: function() {\n this.tokens = this.lexer.tokens();\n this.length = this.tokens.length;\n if(this.tokens.length) {\n this.move();\n }\n var node = new Node(Node.SCRIPT);\n if(this.look) {\n node.add(this.modulebody());\n //未出现module,import,export时,此script不是一个模块\n if(!this.module) {\n node.leaf(0).name(Node.SCRIPTBODY);\n }\n }\n return node;\n },\n modulebody: function() {\n var node = new Node(Node.MODULEBODY);\n while(this.look) {\n node.add(this.moduleitem());\n }\n return node;\n },\n moduleitem: function() {\n if(this.look.content() == 'module') {\n //根据LL2分辨是es6 module语法还是module.exports等语法\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.type() == Token.ID) {\n this.module = true;\n return this.moduleimport();\n }\n break;\n }\n }\n }\n else if(this.look.content() == 'import') {\n this.module = true;\n return this.importdecl();\n }\n else if(this.look.content() == 'export') {\n this.module = true;\n return this.exportdecl();\n }\n return this.stmtlitem();\n },\n importdecl: function() {\n var node = new Node(Node.IMPORTDECL);\n node.add(this.match('import'));\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.STRING) {\n node.add(\n this.match()\n );\n }\n else {\n node.add(\n this.importcaulse(),\n this.fromcaulse()\n );\n }\n node.add(this.match(';'));\n return node;\n },\n moduleimport: function() {\n var node = new Node(Node.MODULEIMPORT);\n node.add(\n this.match('module', true),\n this.bindid(),\n this.fromcaulse(),\n this.match(';')\n );\n return node;\n },\n fromcaulse: function() {\n var node = new Node(Node.FROMCAULSE);\n node.add(\n this.match('from'),\n this.match(Token.STRING)\n );\n return node;\n },\n importcaulse: function() {\n var node = new Node(Node.IMPORTCAULSE);\n while(this.look) {\n if(this.look.type() == Token.ID) {\n node.add(this.match());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n else {\n break;\n }\n }\n else if(this.look.content() == '{') {\n node.add(this.nameimport());\n break;\n }\n else {\n break;\n }\n }\n return node;\n },\n nameimport: function() {\n var node = new Node(Node.NAMEIMPORT);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.importspec());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match('}'));\n return node;\n },\n importspec: function() {\n var node = new Node(Node.IMPORTSPEC);\n if(!this.look || this.look.type() != Token.ID) {\n this.error();\n }\n //LL2确定是否有as\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n if(token.content() == 'as') {\n node.add(\n this.match(),\n this.match(),\n this.bindid()\n );\n return node;\n }\n else {\n break;\n }\n }\n }\n node.add(this.idref());\n return node;\n },\n exportdecl: function() {\n var node = new Node(Node.EXPORTDECL);\n node.add(this.match('export'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '*') {\n node.add(\n this.match(),\n this.fromcaulse(),\n this.match(';')\n );\n }\n else if(this.look.content() == '{') {\n node.add(this.exportcaulse());\n if(this.look && this.look.content() == 'from') {\n node.add(this.fromcaulse());\n }\n node.add(this.match(';'));\n }\n else if(this.look.content() == 'default') {\n node.add(\n this.match(),\n this.assignexpr(),\n this.match(';')\n );\n }\n else if(this.look.content() == 'var') {\n node.add(this.varstmt());\n }\n else {\n node.add(this.decl());\n }\n return node;\n },\n exportcaulse: function() {\n var node = new Node(Node.EXPORTCAULSE);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.exportspec());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match('}'));\n return node;\n },\n exportspec: function() {\n var node = new Node(Node.EXPORTSPEC);\n node.add(this.idref());\n if(this.look && this.look.content() == 'as') {\n //as后一般是id,也可以是关键字,LL2来特殊处理\n var type = Token.ID;\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.type() == Token.KEYWORD) {\n type = Token.KEYWORD;\n }\n break;\n }\n }\n node.add(\n this.match('as'),\n this.match(type)\n );\n }\n return node;\n },\n stmtlitem: function(yYield, isConstructor) {\n if(['function', 'class', 'let', 'const', 'async'].indexOf(this.look.content()) > -1) {\n return this.decl(yYield);\n }\n else if(this.look.type() == Token.ANNOT) {\n return this.annot();\n }\n else {\n return this.stmt(yYield, isConstructor);\n }\n },\n decl: function(yYield) {\n if(!this.look) {\n this.error();\n }\n switch(this.look.content()) {\n case 'let':\n case 'const':\n return this.lexdecl(yYield);\n case 'function':\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n if(token.content() == '*') {\n return this.gendecl();\n }\n else {\n return this.fndecl();\n }\n }\n }\n return this.fndecl();\n case 'async':\n return this.asyncdecl();\n case 'class':\n return this.classdecl();\n default:\n this.error();\n }\n },\n stmt: function(yYield, isConstructor) {\n if(!this.look) {\n this.error();\n }\n switch(this.look.content()) {\n case 'var':\n return this.varstmt(null, yYield);\n case '{':\n return this.blockstmt(yYield);\n case ';':\n return this.emptstmt();\n case 'if':\n return this.ifstmt(yYield);\n case 'do':\n case 'while':\n case 'for':\n return this.iterstmt(yYield);\n case 'continue':\n return this.cntnstmt();\n case 'break':\n return this.brkstmt();\n case 'return':\n return this.retstmt();\n case 'with':\n return this.withstmt(yYield);\n case 'switch':\n return this.swchstmt(yYield, isConstructor);\n case 'throw':\n return this.thrstmt(yYield);\n case 'try':\n return this.trystmt(yYield);\n case 'debugger':\n return this.debstmt();\n default:\n if(this.look.type() == Token.ID) {\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n if(token.content() == ':') {\n return this.labstmt();\n }\n else {\n return this.exprstmt(yYield, isConstructor);\n }\n }\n }\n }\n return this.exprstmt(yYield, isConstructor);\n }\n },\n exprstmt: function(yYield, isConstructor) {\n var node = new Node(Node.EXPRSTMT);\n node.add(this.expr(null, null, yYield, isConstructor), this.match(';'));\n return node;\n },\n lexdecl: function(yYield) {\n var node = new Node(Node.LEXDECL);\n if(this.look.content() == 'let') {\n node.add(this.match());\n }\n else if(this.look.content() == 'const') {\n node.add(this.match());\n }\n else {\n this.error();\n }\n node.add(this.lexbind(yYield));\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.lexbind(yYield)\n );\n }\n node.add(this.match(';'));\n return node;\n },\n lexbind: function(yYield) {\n var node = new Node(Node.LEXBIND);\n this.declnode(node, yYield);\n return node;\n },\n declnode: function(node, yYield) {\n if(!this.look) {\n this.error('missing variable name');\n }\n if(['[', '{'].indexOf(this.look.content()) > -1) {\n node.add(this.bindpat());\n if(!this.look || this.look.content() != '=') {\n this.error('missing = in destructuring declaration');\n }\n node.add(this.initlz(null, null, yYield));\n }\n else {\n node.add(this.bindid('missing variable name'));\n if(this.look && this.look.content() == '=') {\n node.add(this.initlz(null, null, yYield));\n }\n }\n },\n varstmt: function(noSem, yYield) {\n var node = new Node(Node.VARSTMT);\n node.add(\n this.match('var'),\n this.vardecl(yYield)\n );\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.vardecl(yYield)\n );\n }\n if(!noSem) {\n node.add(this.match(';'));\n }\n return node;\n },\n vardecl: function(yYield) {\n var node = new Node(Node.VARDECL);\n this.declnode(node, yYield);\n return node;\n },\n bindid: function(msg, noIn, noOf, canKw) {\n var node = new Node(Node.BINDID);\n if(!this.look) {\n this.error(msg);\n }\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n if(noOf && this.look.content() == 'of') {\n this.error();\n }\n if(canKw && this.look.type() == Token.KEYWORD) {\n node.add(this.match(undefined, msg));\n }\n else {\n node.add(this.match(Token.ID, msg));\n }\n return node;\n },\n bindpat: function() {\n if(this.look.content() == '[') {\n return this.arrbindpat();\n }\n else if(this.look.content() == '{') {\n return this.objbindpat();\n }\n else {\n this.error();\n }\n },\n arrbindpat: function() {\n var node = new Node(Node.ARRBINDPAT);\n node.add(this.match('['));\n while(this.look && this.look.content() != ']') {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n else if(this.look.content() == '...') {\n break;\n }\n else {\n node.add(this.bindelem());\n }\n }\n if(this.look && this.look.content() == '...') {\n node.add(this.bindrest());\n }\n node.add(this.match(']', 'missing ] after element list'));\n return node;\n },\n bindelem: function() {\n var node = new Node(Node.BINDELEM);\n if(['[', '{'].indexOf(this.look.content()) > -1) {\n node.add(this.bindpat());\n if(this.look && this.look.content() == '=') {\n node.add(this.initlz());\n }\n }\n else {\n return this.singlename();\n }\n return node;\n },\n singlename: function(canKw) {\n var node = new Node(Node.SINGLENAME);\n node.add(this.bindid(null, null, null, canKw));\n if(this.look && this.look.content() == '=') {\n node.add(this.initlz());\n }\n return node;\n },\n bindrest: function() {\n var node = new Node(Node.BINDREST);\n node.add(\n this.match('...'),\n this.bindid('no parameter name after ...')\n );\n return node;\n },\n objbindpat: function() {\n var node = new Node(Node.OBJBINDPAT);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.bindpropt());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match('}', 'missing } after property list'));\n return node;\n },\n bindpropt: function() {\n var node = new Node(Node.BINDPROPT);\n //只能是singlename或者properyname\n switch(this.look.type()) {\n case Token.ID:\n case Token.STRING:\n case Token.NUMBER:\n case Token.KEYWORD:\n break;\n default:\n if(this.look.content() != '[') {\n this.error('invalid property id');\n }\n }\n //[为PropertyName左推导\n if(this.look.content() == '[') {\n node.add(\n this.proptname(),\n this.match(':'),\n this.bindelem()\n );\n return node;\n }\n //根据LL2分辨是PropertyName[?Yield, ?GeneratorParameter] : BindingElement[?Yield, ?GeneratorParameter]\n //还是SingleNameBinding[?Yield, ?GeneratorParameter]\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == ':') {\n node.add(\n this.proptname(),\n this.match(':'),\n this.bindelem()\n );\n }\n else {\n node.add(this.singlename(true));\n }\n return node;\n }\n }\n this.error('missing : after property id');\n },\n blockstmt: function(yYield) {\n var node = new Node(Node.BLOCKSTMT);\n node.add(this.block(null, yYield));\n return node;\n },\n block: function(msg, yYield) {\n var node = new Node(Node.BLOCK);\n node.add(this.match('{', msg));\n while(this.look && this.look.content() != '}') {\n node.add(this.stmtlitem(yYield));\n }\n node.add(this.match('}', 'missing } in compound statement'));\n return node;\n },\n emptstmt: function() {\n var node = new Node(Node.EMPTSTMT);\n node.add(this.match(';'));\n return node;\n },\n ifstmt: function(yYield) {\n var node = new Node(Node.IFSTMT);\n node.add(\n this.match('if'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.stmt(yYield)\n );\n if(this.look && this.look.content() == 'else') {\n node.add(\n this.match('else'),\n this.stmt(yYield)\n );\n }\n return node;\n },\n iterstmt: function(yYield) {\n var node = new Node(Node.ITERSTMT);\n switch(this.look.content()) {\n case 'do':\n node.add(\n this.match(),\n this.stmt(yYield),\n this.match('while'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.match(';', false, '', true)\n );\n break;\n case 'while':\n node.add(\n this.match(),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.stmt(yYield)\n );\n break;\n case 'for':\n node.add(\n this.match(),\n this.match('(')\n );\n if(!this.look) {\n this.error();\n }\n //当前是var的话,LL2确定是for(var forbind;或for(var vardecllist\n if(this.look.content() == 'var') {\n var end = false;\n outer:\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n //直接指向forbind\n if(['{', '['].indexOf(token.content()) > -1) {\n node.add(\n this.match(),\n this.forbind()\n );\n }\n //仅一个id之后跟着of或in就是forbind\n else if(token.type() == Token.ID) {\n var end2 = false;\n for(var j = i + 1; j < this.length; j++) {\n var next = this.tokens[j];\n if(!S[next.type()]) {\n if(['in', 'of'].indexOf(next.content()) > -1) {\n node.add(\n this.match(),\n this.forbind()\n );\n }\n else {\n node.add(this.varstmt(true));\n }\n end = end2 = true;\n break outer;\n }\n }\n }\n else {\n this.error();\n }\n end = true;\n break;\n }\n }\n if(!end || !this.look) {\n this.error('missing ; after for-loop initializer');\n }\n //in/of前只能是一个vardecl,不能出现vardecllist\n if(['in', 'of'].indexOf(this.look.content()) > -1) {\n if(node.leaf(2).name() == Node.VARSTMT && node.leaf(2).size() > 2) {\n this.error('invalid for/in left-hand side');\n }\n var isOf = this.look.content() == 'of';\n node.add(\n this.match(),\n isOf ? this.assignexpr() : this.expr()\n );\n }\n else {\n node.add(this.match(';'));\n if(this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.expr());\n }\n }\n }\n else if(['let', 'const'].indexOf(this.look.content()) > -1) {\n outer:\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n //直接指向LexicalDeclaration\n if(['{', '['].indexOf(token.content()) > -1) {\n node.add(this.lexdecl(yYield));\n if(this.look && this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';'));\n if(this.look && this.look.content() != ')') {\n node.add(this.expr());\n }\n break;\n }\n //仅一个id之后跟着of或in也是LexicalDeclaration\n else if(token.type() == Token.ID) {\n for(var j = i + 1; j < this.length; j++) {\n var next = this.tokens[j];\n if(!S[next.type()]) {\n if(['in', 'of'].indexOf(next.content()) > -1) {\n node.add(\n this.match(),\n this.forbind()\n );\n var isOf = next.content() == 'of';\n node.add(\n this.match(),\n isOf ? this.assignexpr() : this.expr()\n );\n }\n else {\n node.add(this.lexdecl(yYield));\n if(this.look && this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';'));\n if(this.look && this.look.content() != ')') {\n node.add(this.expr());\n }\n }\n break outer;\n }\n }\n }\n else {\n this.error();\n }\n }\n }\n }\n else {\n if(['in', 'of'].indexOf(this.look.content()) > -1) {\n this.error();\n }\n //for(EXPRnoin;) or for(leftexpr in\n var expr;\n if(this.look.content() != ';') {\n expr = this.expr(true, true);\n node.add(expr);\n }\n if(!this.look) {\n this.error('missing ;');\n }\n if(this.look.content() == 'in') {\n if(expr.name() == Node.MMBEXPR\n || expr.name() == Node.PRMREXPR\n || expr.name() == Node.NEWEXPR) {\n node.add(\n this.match(),\n this.expr()\n );\n }\n else {\n this.error('invalid for/in left-hand side');\n }\n }\n else if(this.look.content() == 'of') {\n if(expr.name() == Node.MMBEXPR\n || expr.name() == Node.PRMREXPR\n || expr.name() == Node.NEWEXPR) {\n node.add(\n this.match(),\n this.assignexpr()\n );\n }\n else {\n this.error('invalid for/in left-hand side');\n }\n }\n else {\n //for的;不能省略,强制判断\n node.add(this.match(';', 'missing ;'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ';') {\n node.add(this.expr());\n }\n node.add(this.match(';', 'missing ;'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() != ')') {\n node.add(this.expr());\n }\n }\n }\n node.add(this.match(')'));\n node.add(this.stmt(yYield));\n }\n return node;\n },\n cntnstmt: function() {\n var node = new Node(Node.CNTNSTMT);\n node.add(this.match('continue', true));\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n node.add(this.match(';'));\n return node;\n },\n brkstmt: function() {\n var node = new Node(Node.BRKSTMT);\n node.add(this.match('break', true));\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n node.add(this.match(';'));\n return node;\n },\n retstmt: function() {\n var node = new Node(Node.RETSTMT);\n node.add(this.match('return', true));\n //return后换行视作省略;,包括多行注释的换行\n if(this.look) {\n if(this.look.content() == ';'\n || this.look.content() == '}'\n || this.look.type() == Token.LINE\n || this.look.type() == Token.COMMENT) {\n node.add(this.match(';'));\n }\n else {\n node.add(this.expr(), this.match(';'));\n }\n }\n else {\n node.add(this.match(';'));\n }\n return node;\n },\n withstmt: function(yYield) {\n var node = new Node(Node.WITHSTMT);\n node.add(\n this.match('with', 'missing ( before with-statement object'),\n this.match('('),\n this.expr(),\n this.match(')', 'missing ) after with-statement object'),\n this.stmt(yYield)\n );\n return node;\n },\n swchstmt: function(yYield, isConstructor) {\n var node = new Node(Node.SWCHSTMT);\n node.add(\n this.match('switch'),\n this.match('('),\n this.expr(),\n this.match(')'),\n this.caseblock(yYield, isConstructor)\n );\n return node;\n },\n caseblock: function(yYield, isConstructor) {\n var node = new Node(Node.CASEBLOCK);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n if(this.look.content() == 'case') {\n node.add(this.caseclause(yYield, isConstructor));\n }\n else if(this.look.content() == 'default') {\n node.add(this.dftclause(yYield, isConstructor));\n }\n else {\n this.error('invalid switch statement');\n }\n }\n node.add(this.match('}'));\n return node;\n },\n caseclause: function(yYield, isConstructor) {\n var node = new Node(Node.CASECLAUSE);\n node.add(\n this.match('case'),\n this.expr(),\n this.match(':')\n );\n while(this.look\n && this.look.content() != 'case'\n && this.look.content() != 'default'\n && this.look.content() != '}') {\n node.add(this.stmtlitem(yYield, isConstructor));\n }\n return node;\n },\n dftclause: function(yYield, isConstructor) {\n var node = new Node(Node.DFTCLAUSE);\n node.add(\n this.match('default'),\n this.match(':')\n );\n while(this.look && this.look.content() == 'case') {\n node.add(\n this.match('case'),\n this.expr(),\n this.match(':')\n );\n }\n while(this.look && this.look.content() != '}') {\n node.add(this.stmtlitem(yYield, isConstructor));\n }\n return node;\n },\n labstmt: function() {\n var node = new Node(Node.LABSTMT);\n node.add(\n this.match(Token.ID),\n this.match(':'),\n this.stmt()\n );\n return node;\n },\n thrstmt: function() {\n var node = new Node(Node.THRSTMT);\n node.add(\n this.match('throw', true),\n this.expr(),\n this.match(';')\n );\n return node;\n },\n trystmt: function(yYield) {\n var node = new Node(Node.TRYSTMT);\n node.add(\n this.match('try'),\n this.block('missing { before try block', yYield)\n );\n if(this.look && this.look.content() == 'catch') {\n node.add(this.cach(yYield));\n if(this.look && this.look.content() == 'finally') {\n node.add(this.finl(yYield));\n }\n }\n else {\n node.add(this.finl(yYield));\n }\n return node;\n },\n debstmt: function() {\n var node = new Node(Node.DEBSTMT);\n node.add(this.match('debugger'), this.match(';'));\n return node;\n },\n cach: function(yYield) {\n var node = new Node(Node.CACH);\n node.add(\n this.match('catch', 'missing catch or finally after try'),\n this.match('(', 'missing ( before catch'),\n this.cachparam(),\n this.match(')', 'missing ) after catch'),\n this.block('missing { before catch block', yYield)\n );\n return node;\n },\n cachparam: function() {\n var node = new Node(Node.CACHPARAM);\n if(['[', '{'].indexOf(this.look.content()) > -1) {\n node.add(this.bindpat());\n }\n else {\n node.add(this.bindid('missing identifier in catch'));\n }\n return node;\n },\n finl: function(yYield) {\n var node = new Node(Node.FINL);\n node.add(\n this.match('finally'),\n this.block('missing { before finally block', yYield)\n );\n return node;\n },\n imptstmt: function() {\n var node = new Node(Node.IMPTSTMT);\n return node;\n },\n fndecl: function() {\n var node = new Node(Node.FNDECL);\n node.add(\n this.match('function'),\n this.bindid('function statement requires a name'),\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n return node;\n },\n fnexpr: function(noIn, noOf) {\n var node = new Node(Node.FNEXPR);\n node.add(\n this.match('function')\n );\n if(!this.look) {\n this.error('missing formal parameter');\n }\n if(this.look.type() == Token.ID) {\n node.add(this.bindid(null, noIn, noOf));\n }\n node.add(\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n return node;\n },\n genexpr: function(noIn, noOf) {\n var node = new Node(Node.GENEXPR);\n node.add(\n this.match('function'),\n this.match('*')\n );\n if(!this.look) {\n this.error('missing formal parameter');\n }\n if(this.look.type() == Token.ID) {\n node.add(this.bindid(null, noIn, noOf));\n }\n node.add(\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(true),\n this.match('}', 'missing } after function body')\n );\n return node;\n },\n gendecl: function(noIn, noOf) {\n var node = new Node(Node.GENDECL);\n node.add(\n this.match('function'),\n this.match('*')\n );\n node.add(this.bindid('missing formal parameter', noIn, noOf));\n node.add(\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(true),\n this.match('}', 'missing } after function body')\n );\n return node;\n },\n fmparams: function() {\n var node = new Node(Node.FMPARAMS);\n if(!this.look) {\n this.error('missing formal parameter');\n }\n if(this.look.content() != ')') {\n while(this.look) {\n if(this.look.content() == '...') {\n break;\n }\n else {\n node.add(this.bindelem(true));\n if(this.look && this.look.content() == ')') {\n break;\n }\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n }\n }\n if(!this.look) {\n this.error('missing ) after formal parameters');\n }\n if(this.look.content() == '...') {\n node.add(this.bindrest(true));\n }\n return node;\n },\n fnbody: function(yYield, isConstructor) {\n var node = new Node(Node.FNBODY);\n while(this.look && this.look.content() != '}') {\n node.add(this.stmtlitem(yYield, isConstructor));\n }\n return node;\n },\n asyncdecl: function() {\n var node = new Node(Node.ASYNCDECL);\n //LL2判断是否是async arrow fn\n for(var i = this.index + 1; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()] && next.content() != character.ENTER && next.content() != character.LINE) {\n if(next.content() == '(' || next.content() != 'function') {\n return this.asyncarrowfn();\n }\n else {\n break;\n }\n }\n }\n node.add(\n this.match('async', true),\n this.match('function'),\n this.bindid('async function statement requires a name'),\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n return node;\n },\n asyncexpr: function() {\n var node = new Node(Node.ASYNCEXPR);\n node.add(\n this.match('async', true),\n this.match('function')\n );\n if(this.look && this.look.content() == '(') {\n node.add(\n this.match('(', 'missing ( before formal parameters'),\n this.fmparams(),\n this.match(')', 'missing ) after formal parameters'),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n }\n else {\n node.add(\n this.bindid(),\n this.match('{'),\n this.fnbody(),\n this.match('}', 'missing } after function body')\n );\n }\n return node;\n },\n asyncarrowfn: function(noIn, noOf, yYield) {\n var node = new Node(Node.ASYNCARROWFN);\n node.add(this.match('async', true));\n if(this.look && this.look.content() == '(') {\n node.add(this.match());\n if(this.look && this.look.content() != ')') {\n node.add(this.bindid());\n }\n node.add(\n this.match(')'),\n this.match('=>')\n );\n if(this.look && this.look.content() == '{') {\n node.add(\n this.match(),\n this.fnbody(),\n this.match('}')\n )\n }\n else {\n node.add(this.assignexpr());\n }\n }\n else {\n node.add(\n this.bindid('', noIn, noOf),\n this.match('=>')\n );\n if(this.look && this.look.content() == '{') {\n node.add(\n this.match(),\n this.fnbody(),\n this.match('}')\n )\n }\n else {\n node.add(this.assignexpr());\n }\n }\n return node;\n },\n classdecl: function() {\n var node = new Node(Node.CLASSDECL);\n node.add(\n this.match('class'),\n this.bindid()\n );\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == 'extends') {\n node.add(this.heratige());\n }\n node.add(\n this.match('{'),\n this.classbody(),\n this.match('}')\n );\n return node;\n },\n classexpr: function(noIn, noOf) {\n var node = new Node(Node.CLASSEXPR);\n node.add(this.match('class'));\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.ID) {\n node.add(this.bindid(null, noIn, noOf));\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == 'extends') {\n node.add(this.heratige(noIn, noOf));\n }\n node.add(\n this.match('{'),\n this.classbody(noIn, noOf),\n this.match('}')\n );\n return node;\n },\n heratige: function(noIn, noOf) {\n var node = new Node(Node.HERITAGE);\n node.add(\n this.match('extends'),\n this.leftexpr(noIn, noOf)\n );\n return node;\n },\n classbody: function(noIn, noOf) {\n var node = new Node(Node.CLASSBODY);\n while(this.look && this.look.content() != '}') {\n node.add(this.classelem(noIn, noOf));\n }\n return node;\n },\n classelem: function(noIn, noOf) {\n var node = new Node(Node.CLASSELEM);\n if(this.look.content() == ';') {\n node.add(this.match());\n }\n else if(this.look.content() == 'static') {\n node.add(\n this.match(),\n this.method(noIn, noOf)\n );\n }\n else if(this.look.type() == Token.ANNOT) {\n node.add(this.annot());\n }\n else if(['[', '{'].indexOf(this.look.content()) != -1) {\n node.add(this.lexbind());\n }\n else if(this.look.type() == Token.ID && ['get', 'set'].indexOf(this.look.content()) == -1) {\n //LL2区分新增语法classbody内赋值\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '(') {\n node.add(this.method(noIn, noOf));\n }\n else {\n node.add(this.lexbind());\n }\n return node;\n }\n }\n }\n else if(this.look.content() == 'async') {\n node.add(this.asyncmethod(noIn, noOf));\n }\n else {\n node.add(this.method(noIn, noOf));\n }\n return node;\n },\n annot: function() {\n var node = new Node(Node.ANNOT);\n node.add(this.match());\n if(this.look && this.look.content() == '(') {\n node.add(\n this.match('('),\n this.fmparams(),\n this.match(')')\n );\n }\n return node;\n },\n method: function(noIn, noOf) {\n var node = new Node(Node.METHOD);\n if(this.look.content() == 'get') {\n node.add(\n this.match(),\n this.proptname(noIn, noOf),\n this.match('('),\n this.fmparams(),\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}')\n );\n }\n else if(this.look.content() == 'set') {\n node.add(\n this.match(),\n this.proptname(noIn, noOf),\n this.match('('),\n this.fmparams(),\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}')\n );\n }\n else if(this.look.content() == '*') {\n return this.genmethod(noIn, noOf);\n }\n else if(this.look.content() == 'async') {\n return this.asyncmethod(noIn, noOf);\n }\n else {\n var isConstructor = this.look.type() == Token.ID && this.look.content() == 'constructor';\n node.add(\n this.proptname(noIn, noOf),\n this.match('('),\n this.fmparams(),\n this.match(')'),\n this.match('{'),\n this.fnbody(false, isConstructor),\n this.match('}')\n );\n }\n return node;\n },\n genmethod: function(noIn, noOf) {\n var node = new Node(Node.GENMETHOD);\n node.add(\n this.match('*'),\n this.proptname(noIn, noOf),\n this.match('('),\n this.fmparams(),\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}')\n );\n return node;\n },\n asyncmethod: function(noIn, noOf) {\n var node = new Node(Node.ASYNCMETHOD);\n node.add(\n this.match('async', true),\n this.proptname(noIn, noOf),\n this.match('('),\n this.fmparams(),\n this.match(')'),\n this.match('{'),\n this.fnbody(),\n this.match('}')\n );\n return node;\n },\n expr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.EXPR),\n assignexpr = this.assignexpr(noIn, noOf, yYield, isConstructor);\n //LL2区分,后的...是否为cpeapl\n if(this.look && this.look.content() == ',') {\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '...') {\n return assignexpr;\n }\n break;\n }\n }\n node.add(assignexpr);\n outer:\n while(this.look && this.look.content() == ',') {\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '...') {\n break outer;\n }\n break;\n }\n }\n node.add(this.match(), this.assignexpr(noIn, noOf, yYield, isConstructor));\n }\n }\n else {\n return assignexpr;\n }\n return node;\n },\n initlz: function(noIn, noOf, yYield) {\n var node = new Node(Node.INITLZ);\n node.add(\n this.match('='),\n this.assignexpr(noIn, noOf, yYield)\n );\n return node;\n },\n assignexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.ASSIGNEXPR);\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == 'yield') {\n if(!yYield) {\n this.error('yield not in generator function');\n }\n return this.yieldexpr(noIn, noOf, yYield);\n }\n //LL2判断async arrow fn提前\n if(this.look.content() == 'async') {\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '(' || next.type() == Token.ID) {\n node.add(this.asyncarrowfn(noIn, noOf, yYield));\n return node;\n }\n break;\n }\n }\n }\n var cndt = this.cndtexpr(noIn, noOf, yYield, isConstructor);\n if(this.look\n && this.look.content() == '=>'\n && this.hasMoveLine == false\n && cndt.name() == Node.PRMREXPR\n && cndt.size() == 1\n && (cndt.first().name() == Node.CPEAPL\n || (cndt.first().name() == Node.TOKEN\n && cndt.first().token().type() == Token.ID))) {\n node = new Node(Node.ARROWFN);\n var arrowparams = new Node(Node.ARROWPARAMS);\n arrowparams.add(cndt.first());\n node.add(\n arrowparams,\n this.match(),\n this.cncsbody(noIn, noOf, yYield)\n );\n }\n else if(this.look\n && {\n '*=': true,\n '/=': true,\n '%=': true,\n '+=': true,\n '-=': true,\n '<<=': true,\n '>>=': true,\n '>>>=': true,\n '&=': true,\n '^=': true,\n '|=': true,\n '=': true,\n '**': true,\n }.hasOwnProperty(this.look.content())\n && !NOASSIGN.hasOwnProperty(cndt.name())) {\n node.add(cndt, this.match(), this.assignexpr(noIn, noOf, yYield, isConstructor));\n }\n else {\n return cndt;\n }\n return node;\n },\n yieldexpr: function(noIn, noOf, yYield) {\n var node = new Node(Node.YIELDEXPR);\n node.add(this.match('yield'));\n if(this.look && this.look.content() == '*') {\n node.add(this.match());\n }\n if(!this.look) {\n this.error();\n }\n if([';', '}'].indexOf(this.look.content()) == -1\n && this.look.type() != Token.KEYWORD) {\n node.add(this.assignexpr(noIn, noOf, yYield));\n }\n return node;\n },\n cpeapl: function() {\n var node = new Node(Node.CPEAPL);\n node.add(this.match('('));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '...') {\n node.add(\n this.match(),\n this.bindid(),\n this.match(')')\n );\n return node;\n }\n if(this.look.content() != ')') {\n node.add(this.expr());\n }\n if(this.look.content() == ',') {\n node.add(\n this.match(),\n this.match('...'),\n this.bindid()\n );\n }\n node.add(this.match(')'));\n return node;\n },\n cncsbody: function(noIn, noOf) {\n var node = new Node(Node.CNCSBODY);\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '{') {\n node.add(\n this.match(),\n this.fnbody(),\n this.match('}')\n );\n }\n else {\n node.add(this.assignexpr(noIn, noOf));\n }\n return node;\n },\n cndtexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.CNDTEXPR),\n logorexpr = this.logorexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '?') {\n node.add(\n logorexpr,\n this.match(),\n this.assignexpr(noIn, noOf, yYield, isConstructor),\n this.match(':'),\n this.assignexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n else {\n return logorexpr;\n }\n return node;\n },\n logorexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.LOGOREXPR),\n logandexpr = this.logandexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '||') {\n node.add(logandexpr);\n while(this.look && this.look.content() == '||') {\n node.add(\n this.match(),\n this.logandexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return logandexpr;\n }\n return node;\n },\n logandexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.LOGANDEXPR),\n bitorexpr = this.bitorexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '&&') {\n node.add(bitorexpr);\n while(this.look && this.look.content() == '&&') {\n node.add(\n this.match(),\n this.bitorexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return bitorexpr;\n }\n return node;\n },\n bitorexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.BITOREXPR),\n bitxorexpr = this.bitxorexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '|') {\n node.add(bitxorexpr);\n while(this.look && this.look.content() == '|') {\n node.add(\n this.match(),\n this.bitxorexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return bitxorexpr;\n }\n return node;\n },\n bitxorexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.BITXOREXPR),\n bitandexpr = this.bitandexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '^') {\n node.add(bitandexpr);\n while(this.look && this.look.content() == '^') {\n node.add(\n this.match(),\n this.bitandexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return bitandexpr;\n }\n return node;\n },\n bitandexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.BITANDEXPR),\n eqexpr = this.eqexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && this.look.content() == '&') {\n node.add(eqexpr);\n while(this.look && this.look.content() == '&') {\n node.add(\n this.match(),\n this.eqexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return eqexpr;\n }\n return node;\n },\n eqexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.EQEXPR),\n reltexpr = this.reltexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && {\n '==': true,\n '===': true,\n '!==': true,\n '!=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(reltexpr);\n while(this.look && {\n '==': true,\n '===': true,\n '!==': true,\n '!=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n this.match(),\n this.reltexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return reltexpr;\n }\n return node;\n },\n reltexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.RELTEXPR),\n shiftexpr = this.shiftexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && ({\n '<': true,\n '>': true,\n '>=': true,\n '<=': true,\n 'instanceof': true\n }.hasOwnProperty(this.look.content())\n || (!noIn && this.look.content() == 'in'))) {\n node.add(shiftexpr);\n while(this.look && ({\n '<': true,\n '>': true,\n '>=': true,\n '<=': true,\n 'instanceof': true\n }.hasOwnProperty(this.look.content())\n || (!noIn && this.look.content() == 'in'))) {\n node.add(\n this.match(),\n this.shiftexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return shiftexpr;\n }\n return node;\n },\n shiftexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.SHIFTEXPR),\n addexpr = this.addexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && ['<<', '>>', '>>>'].indexOf(this.look.content()) != -1) {\n node.add(addexpr);\n while(this.look && ['<<', '>>', '>>>'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.addexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return addexpr;\n }\n return node;\n },\n addexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.ADDEXPR),\n mtplexpr = this.mtplexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(mtplexpr);\n while(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.mtplexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return mtplexpr;\n }\n return node;\n },\n mtplexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.MTPLEXPR),\n unaryexpr = this.unaryexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && ['*', '/', '%'].indexOf(this.look.content()) != -1) {\n node.add(unaryexpr);\n while(this.look && ['*', '/', '%'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.unaryexpr(noIn, noOf, yYield, isConstructor)\n );\n }\n }\n else {\n return unaryexpr;\n }\n return node;\n },\n unaryexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.UNARYEXPR);\n if(!this.look) {\n this.error();\n }\n switch(this.look.content()) {\n case '++':\n case '--':\n node.add(\n this.match(),\n this.leftexpr(noIn, noOf, yYield, isConstructor)\n );\n break;\n case 'delete':\n case 'void':\n case 'typeof':\n case '+':\n case '-':\n case '~':\n case '!':\n case 'await':\n node.add(\n this.match(),\n this.unaryexpr(noIn, noOf, yYield, isConstructor)\n );\n break;\n default:\n return this.postfixexpr(noIn, noOf, yYield, isConstructor);\n }\n return node;\n },\n postfixexpr: function(noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.POSTFIXEXPR);\n var leftexpr = this.leftexpr(noIn, noOf, yYield, isConstructor);\n if(this.look && ['++', '--'].indexOf(this.look.content()) > -1 && !this.hasMoveLine) {\n node.add(\n leftexpr,\n this.match()\n );\n }\n else {\n return leftexpr;\n }\n return node;\n },\n leftexpr: function(noIn, noOf, yYield, isConstructor) {\n if(this.look.content() == 'new') {\n return this.newexpr(0, noIn, noOf, yYield);\n }\n else {\n return this.callexpr(null, noIn, noOf, yYield, isConstructor);\n }\n },\n newexpr: function(depth, noIn, noOf, yYield) {\n depth = depth || 0;\n var node = new Node(Node.NEWEXPR);\n node.add(this.match('new'));\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == 'new') {\n node.add(this.newexpr(depth + 1, noIn, noOf, yYield));\n }\n //LL2分辨super后是否为.[至mmbexpr\n else if(this.look.content() == 'super') {\n var end = false;\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(['.', '['].indexOf(next.content()) > -1) {\n node.add(this.mmbexpr(noIn, noOf, yYield));\n }\n else {\n node.add(this.match());\n }\n end = true;\n break;\n }\n }\n if(!end) {\n node.add(this.match());\n }\n }\n else {\n node.add(this.mmbexpr(noIn, noOf, yYield));\n }\n if(this.look && this.look.content() == '(') {\n node.add(this.args());\n }\n if(this.look && ['.', '['].indexOf(this.look.content()) > -1) {\n var mmb = new Node(Node.MMBEXPR);\n mmb.add(node);\n while(this.look) {\n if(this.look.content() == '.') {\n mmb.add(\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n }\n else if(this.look.content() == '[') {\n mmb.add(\n this.match(),\n this.expr(noIn, noOf, yYield),\n this.match(']')\n );\n }\n else {\n break;\n }\n }\n if(depth == 0 && this.look && this.look.content() == '(') {\n var callexpr = this.callexpr(mmb, noIn, noOf, yYield);\n return callexpr;\n }\n return mmb;\n }\n return node;\n },\n callexpr: function(mmb, noIn, noOf, yYield, isConstructor) {\n var node = new Node(Node.CALLEXPR);\n if(!mmb) {\n //根据LL2分辨是super()还是mmbexpr\n if(this.look.content() == 'super') {\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '(') {\n if(!isConstructor) {\n node.add(this.match());\n this.error('super call is only allowed in derived constructor');\n }\n node.add(\n this.match(),\n this.args()\n );\n mmb = node;\n node = new Node(Node.CALLEXPR);\n }\n else {\n mmb = this.mmbexpr(noIn, noOf, yYield);\n }\n break;\n }\n }\n }\n else {\n mmb = this.mmbexpr(noIn, noOf, yYield);\n }\n }\n if(this.look && this.look.content() == '(') {\n node.add(\n mmb,\n this.args()\n );\n while(this.look) {\n var temp;\n if(this.look.content() == '.') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n node = temp;\n }\n else if(this.look.content() == '[') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.expr(noIn, noOf, yYield),\n this.match(']')\n );\n node = temp;\n }\n else if(this.look.content() == '(') {\n temp = new Node(Node.CALLEXPR);\n temp.add(\n node,\n this.args()\n );\n node = temp;\n }\n else if(this.look.type() == Token.TEMPLATE) {\n temp = new Node(Node.CALLEXPR);\n temp.add(\n node,\n this.match()\n );\n node = temp;\n }\n else {\n break;\n }\n }\n }\n else {\n return mmb;\n }\n return node;\n },\n mmbexpr: function(noIn, noOf, yYield) {\n var node = new Node(Node.MMBEXPR);\n var mmb;\n if(this.look.content() == 'super') {\n mmb = this.match();\n if(!this.look || ['.', '['].indexOf(this.look.content()) == -1) {\n this.error();\n }\n }\n else {\n mmb = this.prmrexpr(noIn, noOf, yYield);\n }\n if(this.look\n && (['.', '['].indexOf(this.look.content()) > -1\n || this.look.type() == Token.TEMPLATE)) {\n node.add(mmb);\n if(this.look.content() == '.') {\n node.add(\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n )\n }\n else if(this.look.content() == '[') {\n node.add(\n this.match(),\n this.expr(noIn, noOf, yYield),\n this.match(']')\n );\n }\n else {\n node.add(this.match());\n }\n while(this.look) {\n var temp\n if(this.look.content() == '.') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.match(Token.ID, 'missing name after . operator')\n );\n node = temp;\n }\n else if(this.look.content() == '[') {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match(),\n this.expr(noIn, noOf, yYield),\n this.match(']')\n );\n node = temp;\n }\n else if(this.look.type() == Token.TEMPLATE) {\n temp = new Node(Node.MMBEXPR);\n temp.add(\n node,\n this.match()\n );\n node = temp;\n }\n else {\n break;\n }\n }\n }\n else {\n return mmb;\n }\n return node;\n },\n prmrexpr: function(noIn, noOf, yYield) {\n var node = new Node(Node.PRMREXPR);\n switch(this.look.type()) {\n case Token.ID:\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n if(noOf && this.look.content() == 'of') {\n this.error();\n }\n node.add(this.idref(noIn, noOf));\n break;\n case Token.NUMBER:\n case Token.STRING:\n case Token.REG:\n case Token.TEMPLATE:\n node.add(this.match());\n break;\n case Token.TEMPLATE_HEAD:\n return this.template(noIn, noOf, yYield);\n default:\n switch(this.look.content()) {\n //LL2是否为*区分fnexpr和genexpr\n case 'function':\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == '*') {\n node.add(this.genexpr(noIn, noOf));\n }\n else {\n node.add(this.fnexpr(noIn, noOf));\n }\n break;\n }\n }\n break;\n case 'async':\n return this.asyncexpr();\n case 'class':\n node.add(this.classexpr(noIn, noOf));\n break;\n case 'this':\n case 'null':\n case 'true':\n case 'false':\n node.add(this.match());\n break;\n //LL2区分for是否为gencmph\n case '(':\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == 'for') {\n node.add(this.gencmph(noIn, noOf, yYield));\n }\n else {\n node.add(this.cpeapl(noIn, noOf, yYield));\n }\n break;\n }\n }\n break;\n case '[':\n node.add(this.arrinit(noIn, noOf));\n break;\n case '{':\n node.add(this.objltr(noIn, noOf));\n break;\n default:\n this.error();\n }\n }\n return node;\n },\n template: function(noIn, noOf, yYield) {\n var node = new Node(Node.TEMPLATE);\n node.add(this.match());\n while(this.look && this.look.type() != Token.TEMPLATE_TAIL) {\n node.add(this.expr(noIn, noOf, yYield));\n if(this.look && this.look.type() == Token.TEMPLATE_TAIL) {\n break;\n }\n node.add(this.match(Token.TEMPLATE_MIDDLE));\n }\n node.add(this.match());\n return node;\n },\n arrinit: function(noIn, noOf) {\n //根据LL2分辨是arrltr还是arrcmph\n //[assignexpr or [for\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if(next.content() == 'for') {\n return this.arrcmph(noIn, noOf);\n }\n else {\n return this.arrltr(noIn, noOf);\n }\n }\n }\n this.error();\n },\n gencmph: function(noIn, noOf, yYield) {\n var node = new Node(Node.GENCMPH);\n node.add(\n this.match('('),\n this.cmph(noIn, noOf, yYield),\n this.match(')')\n );\n return node;\n },\n arrcmph: function(noIn, noOf) {\n var node = new Node(Node.ARRCMPH);\n node.add(\n this.match('['),\n this.cmph(noIn, noOf),\n this.match(']', 'missing ] after element list')\n );\n return node;\n },\n cmph: function(noIn, noOf, yYield) {\n var node = new Node(Node.CMPH);\n node.add(this.cmphfor());\n while(this.look && this.look.content() != ']') {\n if(this.look.content() == 'for') {\n node.add(this.cmphfor(noIn, noOf, yYield));\n }\n else if(this.look.content() == 'if') {\n node.add(this.cmphif(noIn, noOf, yYield));\n }\n else {\n node.add(this.assignexpr(noIn, noOf, yYield));\n break;\n }\n }\n return node;\n },\n cmphfor: function(noIn, noOf) {\n var node = new Node(Node.CMPHFOR);\n node.add(\n this.match('for'),\n this.match('('),\n this.forbind(noIn, noOf),\n this.match('of'),\n this.assignexpr(noIn, noOf),\n this.match(')')\n );\n return node;\n },\n forbind: function(noIn, noOf) {\n if(!this.look) {\n this.error();\n }\n if(['[', '{'].indexOf(this.look.content()) > -1) {\n return this.bindpat();\n }\n else {\n return this.bindid(noIn, noOf);\n }\n },\n cmphif: function(noIn, noOf) {\n var node = new Node(Node.CMPHIF);\n node.add(\n this.match('if'),\n this.match('('),\n this.assignexpr(noIn, noOf),\n this.match(')')\n );\n return node;\n },\n arrltr: function(noIn, noOf) {\n var node = new Node(Node.ARRLTR);\n node.add(this.match('['));\n while(this.look && this.look.content() != ']') {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n else if(this.look.content() == '...') {\n node.add(this.spread(noIn, noOf));\n }\n else {\n node.add(this.assignexpr(noIn, noOf));\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n }\n node.add(this.match(']', 'missing ] after element list'));\n return node;\n },\n spread: function(noIn, noOf) {\n var node = new Node(Node.SPREAD);\n node.add(this.match('...'), this.assignexpr(noIn, noOf));\n return node;\n },\n objltr: function(noIn, noOf) {\n var node = new Node(Node.OBJLTR);\n node.add(this.match('{'));\n while(this.look && this.look.content() != '}') {\n node.add(this.proptdef(noIn, noOf));\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match('}', 'missing } after property list'));\n return node;\n },\n proptdef: function(noIn, noOf) {\n var node = new Node(Node.PROPTDEF);\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '[') {\n var cmpt = this.cmptpropt(noIn, noOf);\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == ':') {\n node.add(\n this.proptname(cmpt, noIn, noOf),\n this.match(),\n this.assignexpr(noIn, noOf)\n );\n }\n else {\n node.add(cmpt);\n }\n }\n else if(this.look.content() == '...') {\n node.add(\n this.match(),\n this.assignexpr()\n );\n }\n else {\n switch(this.look.type()) {\n case Token.ID:\n //LL2区分 (为method :为propt: assginment\n var end = false;\n for(var i = this.index; i < this.length; i++) {\n var next = this.tokens[i];\n if(!S[next.type()]) {\n if([Token.KEYWORD, Token.ID].indexOf(next.type()) > -1 || next.content() == '(') {\n node.add(this.method(noIn, noOf));\n end = true;\n }\n else if(next.content() == '=') {\n node.add(\n this.match(),\n this.initlz(noIn, noOf)\n );\n end = true;\n }\n else if([',', '}'].indexOf(next.content()) > -1) {\n node.add(this.idref(noIn, noOf));\n end = true;\n }\n break;\n }\n }\n if(end) {\n break;\n }\n case Token.STRING:\n case Token.NUMBER:\n case Token.KEYWORD:\n node.add(\n this.proptname(cmpt, noIn, noOf),\n this.match(':', 'missing : after property id'),\n this.assignexpr(noIn, noOf)\n );\n break;\n default:\n this.error('invalid property id');\n }\n }\n return node;\n },\n idref: function(noIn, noOf) {\n if(!this.look) {\n this.error('invalid property id');\n }\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n if(noOf && this.look.content() == 'of') {\n this.error();\n }\n return this.match(Token.ID, 'invalid property id');\n },\n proptname: function(cmpt, noIn, noOf) {\n var node = new Node(Node.PROPTNAME);\n if(!this.look) {\n this.error('invalid property id');\n }\n if(cmpt) {\n node.add(cmpt);\n }\n else if(this.look.content() == '[') {\n node.add(this.cmptpropt(noIn, noOf));\n }\n else {\n node.add(this.ltrpropt(noIn, noOf));\n }\n return node;\n },\n ltrpropt: function(noIn, noOf) {\n var node = new Node(Node.LTRPROPT);\n switch(this.look.type()) {\n case Token.ID:\n if(noIn && this.look.content() == 'in') {\n this.error();\n }\n if(noOf && this.look.content() == 'of') {\n this.error();\n }\n case Token.NUMBER:\n case Token.STRING:\n case Token.KEYWORD:\n node.add(this.match());\n return node;\n default:\n this.error('invalid property id');\n }\n },\n cmptpropt: function(noIn, noOf) {\n var node = new Node(Node.CMPTPROPT);\n node.add(\n this.match('['),\n this.assignexpr(noIn, noOf),\n this.match(']')\n );\n return node;\n },\n args: function() {\n var node = new Node(Node.ARGS);\n node.add(this.match('('));\n if(!this.look) {\n this.error();\n }\n node.add(this.arglist());\n node.add(this.match(')'));\n return node;\n },\n arglist: function() {\n var node = new Node(Node.ARGLIST);\n if(this.look && this.look.content() == '...') {\n node.add(\n this.match(),\n this.assignexpr()\n );\n }\n else if(this.look && this.look.content() != ')') {\n while(this.look) {\n node.add(this.assignexpr());\n if(this.look) {\n if(this.look.content() == ',') {\n node.add(this.match());\n if(this.look && this.look.content() == '...') {\n node.add(\n this.match(),\n this.assignexpr()\n );\n break;\n }\n }\n else if(this.look.content() == ')') {\n break;\n }\n }\n }\n }\n return node;\n },\n virtual: function(s) {\n return new Node(Node.TOKEN, new Token(Token.VIRTUAL, s));\n },\n match: function(type, line, msg, autoSemicolon) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && (this.hasMoveLine || autoSemicolon))\n || this.look.content() == '}')\n ) {\n if(this.look && S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n },\n move: function(line) {\n this.lastLine = this.line;\n this.lastCol = this.col;\n //遗留下来的换行符\n this.hasMoveLine = false;\n do {\n this.look = this.tokens[this.index++];\n if(!this.look) {\n return;\n }\n //存下忽略的token\n if(S[this.look.type()]) {\n this.ignores[this.index - 1] = this.look;\n }\n //包括line的情况下要跳出\n if(this.look.type() == Token.LINE) {\n this.line++;\n this.col = 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n else if(this.look.type() == Token.COMMENT) {\n var s = this.look.content();\n var n = character.count(this.look.content(), character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n }\n else {\n this.col += this.look.content().length;\n if(!S[this.look.type()]) {\n break;\n }\n }\n } while(this.index <= this.length);\n },\n error: function(msg) {\n msg = 'SyntaxError: ' + (msg || ' syntax error');\n throw new Error(msg + ' line ' + this.lastLine + ' col ' + this.lastCol);\n }\n}).statics({\n S: S\n});\nmodule.exports = Parser;\n","var INode = require('../Node');\nvar Node = INode.extend(function(type, children) {\n INode.call(this, type, children);\n return this;\n}).statics({\n SHEET: 'sheet',\n ELEMENT: 'element',\n IMPORT: 'import',\n MEDIA: 'media',\n CHARSET: 'charset',\n MEDIAQLIST: 'mediaqlist',\n MEDIAQUERY: 'mediaquer',\n MEDIATYPE: 'mediatype',\n NAMESPACE: 'namespace',\n DOC: 'doc',\n EXPR: 'expression',\n BLOCK: 'block',\n STYLESET: 'styleset',\n STYLE: 'style',\n SELECTORS: 'selectors',\n SELECTOR: 'selector',\n KEY: 'key',\n VALUE: 'value',\n FONTFACE: 'fontface',\n KEYFRAMES: 'kframes',\n PAGE: 'page',\n URL: 'url',\n LINEARGRADIENT: 'lineargradient',\n POINT: 'point',\n COLORSTOP: 'colorstop',\n RADIOGRADIENT: 'radiogradient',\n POS: 'pos',\n LEN: 'len',\n LENGTH: 'length',\n RGB: 'rgb',\n RGBA: 'rgba',\n HSL: 'hsl',\n HSLA: 'hsla',\n MAX: 'max',\n MIN: 'min',\n VARDECL: 'vardecl',\n EXTEND: 'extend',\n FORMAT: 'format',\n FN: 'function',\n PARAMS: 'params',\n FNC: 'fncall',\n CPARAMS: 'cparams',\n CTSTYLE: 'ctstyle',\n VIEWPORT: 'viewport',\n SUPPORTS: 'supports',\n CNDT: 'cndt',\n ADDEXPR: 'addexpr',\n MTPLEXPR: 'mtplexpr',\n PRMREXPR: 'prmrexpr',\n PARAM: 'param',\n COUNTER: 'counter',\n CALC: 'calc',\n TOGGLE: 'toggle',\n ATTR: 'attr',\n FILTER: 'filter',\n TRANSLATE: 'translate',\n \"TRANSLATE3D\": 'translate3d',\n TRANSLATEX: 'translatex',\n TRANSLATEY: 'translatey',\n TRANSLATEZ: 'translatez',\n ROTATE: 'rotate',\n \"ROTATE3D\": 'rotate3d',\n ROTATEX: 'rotatex',\n ROTATEY: 'rotatey',\n ROTATEZ: 'rotatez',\n SCALE: 'scale',\n \"SCALE3D\": 'scale3d',\n SCALEX: 'scalex',\n SCALEY: 'scaley',\n SCALEZ: 'scalez',\n VARS: 'vars',\n BRACKET: 'bracket',\n URLPREFIX: 'ulrprefix',\n DOMAIN: 'domain',\n REGEXP: 'regexp',\n IFSTMT: 'ifstmt',\n FORSTMT: 'forstmt',\n VARSTMT: 'varstmt',\n EQSTMT: 'eqstmt',\n RELSTMT: 'relstmt',\n ADDSTMT: 'addstmt',\n MTPLSTMT: 'mtplstmt',\n POSTFIXSTMT: 'postfixstmt',\n MMBSTMT: 'mmbstmt',\n PRMRSTMT: 'prmrstmt',\n ARRLTR: 'arrltr',\n DIR: 'dir',\n UNBOX: 'unbox',\n BASENAME: 'basename',\n EXTNAME: 'extname',\n WIDTH: 'width',\n HEIGHT: 'height',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;","var IParser = require('../Parser');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/Lexer');\nvar Rule = require('../../lexer/rule/CssRule');\nvar Token = require('../../lexer/CssToken');\nvar Node = require('./Node');\n\nvar S = {};\nS[Token.BLANK] = S[Token.TAB] = S[Token.COMMENT] = S[Token.LINE] = true;\n\nvar MQL = {\n 'only': true,\n 'not': true,\n 'all': true,\n 'aural': true,\n 'braille': true,\n 'handheld': true,\n 'print': true,\n 'projection': true,\n 'screen': true,\n 'tty': true,\n 'embossed': true,\n 'tv': true,\n '(': true\n};\n\nvar MT = {\n 'all': true,\n 'aural': true,\n 'braille': true,\n 'handheld': true,\n 'print': true,\n 'projection': true,\n 'screen': true,\n 'tty': true,\n 'embossed': true,\n 'tv': true\n};\n\nvar NO_MTPL = {\n 'font': true,\n 'border-image': true,\n 'device-aspect-ratio': true,\n 'device-pixel-ratio': true,\n 'min-device-pixel-ratio': true,\n 'max-device-pixel-ratio': true,\n 'min--moz-device-pixel-ratio': true,\n 'max--moz-device-pixel-ratio': true\n};\n\nvar Parser = IParser.extend(function(lexer) {\n IParser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n init: function(lexer) {\n if(lexer) {\n this.lexer = lexer;\n }\n else if(this.lexer) {\n this.lexer.init();\n }\n else {\n this.lexer = new Lexer(new Rule());\n }\n this.look = null;\n this.tokens = null;\n this.lastLine = 1;\n this.lastCol = 1;\n this.line = 1;\n this.col = 1;\n this.index = 0;\n this.length = 0;\n this.ignores = {};\n this.tree = {};\n },\n parse: function(code) {\n this.lexer.parse(code);\n this.tree = this.sheet();\n return this.tree;\n },\n ast: function() {\n return this.tree;\n },\n sheet: function() {\n this.tokens = this.lexer.tokens();\n this.length = this.tokens.length;\n if(this.tokens.length) {\n this.move();\n }\n var node = new Node(Node.SHEET);\n while(this.look) {\n var element = this.element();\n if(element) {\n node.add(element);\n }\n }\n return node;\n },\n element: function() {\n switch(this.look.type()) {\n case Token.HEAD:\n return this.head();\n case Token.VARS:\n var isFn = false;\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n isFn = t.content() == '(';\n break;\n }\n }\n return isFn ? this.fn() : this.varstmt();\n case Token.SELECTOR:\n case Token.PSEUDO:\n return this.styleset();\n default:\n if(this.look.content() == '[' && this.look.type() != Token.HACK) {\n return this.styleset();\n }\n if(['{', '}'].indexOf(this.look.content()) > -1) {\n this.error();\n }\n return this.match();\n }\n },\n head: function() {\n var s = this.look.content().toLowerCase();\n s = s.replace(/^@(-moz-|-o-|-ms-|-webkit-)/, '@');\n switch(s) {\n case '@import':\n return this.impt();\n case '@media':\n return this.media();\n case '@charset':\n return this.charset();\n case '@font-face':\n return this.fontface();\n case '@keyframes':\n return this.kframes();\n case '@page':\n return this.page();\n case '@namespace':\n return this.namespace();\n case '@document':\n return this.doc();\n case '@counter-style':\n return this.ctstyle();\n case '@viewport':\n return this.viewport();\n case '@supports':\n return this.supports();\n case '@extend':\n return this.extend();\n case '@if':\n return this.ifstmt();\n case '@for':\n return this.forstmt();\n default:\n this.error('unknow head');\n }\n },\n extend: function() {\n var node = new Node(Node.EXTEND);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n node.add(this.selectors());\n node.add(this.match(';'));\n return node;\n },\n supports: function() {\n var node = new Node(Node.SUPPORTS);\n node.add(this.match());\n while(this.look && this.look.content() != '{') {\n node.add(this.cndt());\n }\n node.add(this.block());\n return node;\n },\n cndt: function() {\n var node = new Node(Node.CNDT);\n if(!this.look) {\n this.error();\n }\n switch(this.look.content().toLowerCase()) {\n case 'and':\n case 'not':\n case 'or':\n node.add(this.match());\n node.add(this.cndt());\n break;\n case '(':\n node.add(\n this.match(),\n this.cndt(),\n this.match(')')\n );\n break;\n default:\n node.add(this.style(null, true));\n break;\n }\n return node;\n },\n viewport: function() {\n var node = new Node(Node.VIEWPORT);\n node.add(this.match());\n node.add(this.block());\n return node;\n },\n ctstyle: function() {\n var node = new Node(Node.CTSTYLE);\n node.add(this.match());\n node.add(this.match(Token.ID));\n node.add(this.block());\n return node;\n },\n impt: function() {\n var node = new Node(Node.IMPORT);\n node.add(this.match());\n node.add(this.url(true));\n if(this.look && MQL.hasOwnProperty(this.look.content().toLowerCase())) {\n node.add(this.mediaQList());\n }\n node.add(this.match(';'));\n return node;\n },\n media: function() {\n var node = new Node(Node.MEDIA);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n if(MQL.hasOwnProperty(this.look.content().toLowerCase())\n || this.look.type() == Token.HACK) {\n node.add(this.mediaQList());\n }\n if(this.look && this.look.content() == '{') {\n node.add(this.block());\n }\n return node;\n },\n mediaQList: function() {\n var node = new Node(Node.MEDIAQLIST);\n node.add(this.mediaQuery());\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.mediaQuery()\n );\n }\n return node;\n },\n mediaQuery: function() {\n var node = new Node(Node.MEDIAQUERY);\n if(this.look && ['only', 'not'].indexOf(this.look.content().toLowerCase()) > -1) {\n node.add(this.match());\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '(') {\n node.add(this.expr());\n }\n else {\n node.add(this.mediaType());\n }\n while(this.look && this.look.content().toLowerCase() == 'and') {\n node.add(\n this.match(),\n this.expr()\n );\n }\n return node;\n },\n mediaType: function() {\n var node = new Node(Node.MEDIATYPE);\n if(this.look && this.look.type() == Token.HACK) {\n node.add(this.match());\n }\n if(this.look && MT.hasOwnProperty(this.look.content().toLowerCase())) {\n node.add(this.match());\n }\n else {\n while(this.look\n && [Token.ID, Token.NUMBER, Token.UNITS, Token.PROPERTY].indexOf(this.look.type()) > -1\n && !MT.hasOwnProperty(this.look.content().toLowerCase())) {\n node.add(this.match());\n }\n }\n while(this.look && this.look.type() == Token.HACK) {\n node.add(this.match());\n if(this.look && MT.hasOwnProperty(this.look.content().toLowerCase())) {\n node.add(this.match());\n }\n else {\n while(this.look\n && [Token.ID, Token.NUMBER, Token.UNITS, Token.PROPERTY].indexOf(this.look.type()) > -1\n && !MT.hasOwnProperty(this.look.content().toLowerCase())) {\n node.add(this.match());\n }\n }\n }\n return node;\n },\n expr: function() {\n var node = new Node(Node.EXPR);\n node.add(this.match('('));\n var k = this.key();\n node.add(k);\n var first = k.first();\n if(first.token().type() == Token.HACK) {\n first = first.next();\n }\n var name = first.token().content().toLowerCase();\n //有可能整个变量作为一个键值,无需再有:value部分\n if(this.look && this.look.content() == ':') {\n node.add(this.match(':'));\n node.add(this.value(name));\n }\n node.add(this.match(')'));\n return node;\n },\n charset: function() {\n var node = new Node(Node.CHARSET);\n node.add(this.match());\n node.add(this.addexpr(Token.STRING));\n node.add(this.match(';'));\n return node;\n },\n fontface: function() {\n var node = new Node(Node.FONTFACE);\n node.add(this.match());\n\n var node2 = new Node(Node.BLOCK);\n node2.add(this.match('{'));\n\n outer:\n while(this.look) {\n if(this.look.type() == Token.VARS) {\n var isFnCall = false;\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n isFnCall = t.content() == '(';\n break;\n }\n }\n if(isFnCall) {\n node2.add(this.fnc());\n }\n else {\n node2.add(this.addexpr());\n if(this.look && this.look.content() == ':') {\n node2.add(\n this.match(),\n this.value()\n );\n }\n else {\n node2.add(this.match(';'));\n }\n }\n break;\n }\n switch(this.look.content().toLowerCase()) {\n case 'font-family':\n case 'src':\n case 'font-weight':\n case 'font-style':\n node2.add(this.style(this.look.content()));\n break;\n default:\n break outer;\n }\n }\n while(this.look && this.look.content() != '}') {\n node2.add(this.style());\n }\n node2.add(this.match('}'));\n node.add(node2);\n return node;\n },\n kframes: function() {\n var node = new Node(Node.KEYFRAMES);\n node.add(this.match());\n node.add(this.match(Token.ID));\n while(this.look && [Token.ID, Token.VARS].indexOf(this.look.type()) > -1) {\n node.add(this.match());\n }\n node.add(this.block(true));\n return node;\n },\n page: function() {\n var node = new Node(Node.PAGE);\n node.add(this.match());\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n if(this.look && this.look.type() == Token.PSEUDO) {\n node.add(this.match());\n }\n node.add(this.block());\n return node;\n },\n fn: function() {\n var node = new Node(Node.FN);\n node.add(\n this.match(Token.VARS),\n this.params(),\n this.block()\n );\n return node;\n },\n params: function() {\n var node = new Node(Node.PARAMS);\n node.add(this.match('('));\n while(this.look && this.look.content() != ')') {\n node.add(this.match(Token.VARS));\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match(')'));\n return node;\n },\n fnc: function() {\n var node = new Node(Node.FNC);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n cparams: function() {\n var node = new Node(Node.CPARAMS);\n node.add(this.match('('));\n while(this.look && this.look.content() != ')') {\n if(this.look.content() == '~'\n && this.tokens[this.index]\n && [Token.VARS, Token.STRING].indexOf(this.tokens[this.index].type()) > -1) {\n node.add(this.unbox());\n }\n else if(this.look.content() == '[') {\n node.add(this.arrltr());\n }\n else if(this.look.content() == '@dir') {\n node.add(this.dir());\n }\n else if(this.look.type() == Token.KEYWORD || this.look.type() == Token.HACK) {\n node.add(this.style(null, true, true));\n }\n else {\n node.add(this.value(null, true));\n }\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match(')'));\n return node;\n },\n namespace: function() {\n var node = new Node(Node.NAMESPACE);\n node.add(this.match());\n if(this.look && this.look.type() == Token.ID) {\n node.add(this.match());\n }\n node.add(this.addexpr(Token.STRING));\n node.add(this.match(';'));\n return node;\n },\n doc: function() {\n var node = new Node(Node.DOC);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n switch(this.look.content().toLowerCase()) {\n case 'url-prefix':\n case 'domain':\n case 'regexp':\n node.add(this.urlPrefix(this.look.content().toUpperCase().replace('-', '')));\n break;\n case 'url':\n node.add(this.url());\n break;\n default:\n this.error();\n }\n while(this.look && this.look.content() == ',') {\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n switch(this.look.content().toLowerCase()) {\n case 'url-prefix':\n case 'domain':\n case 'regexp':\n node.add(this.urlPrefix(this.look.content().toUpperCase().replace('-', '')));\n break;\n case 'url':\n node.add(this.url());\n break;\n default:\n this.error();\n }\n }\n if(this.look && this.look.content() == '{') {\n node.add(this.block());\n }\n return node;\n },\n urlPrefix: function(name) {\n var node = new Node(Node[name]);\n node.add(\n this.match(),\n this.match('(')\n );\n if(this.look && this.look.content() != ')') {\n node.add(this.addexpr(Token.STRING));\n }\n node.add(this.match(')'));\n return node;\n },\n vardecl: function() {\n var node = new Node(Node.VARDECL);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n if([':', '='].indexOf(this.look.content()) > -1) {\n node.add(this.match());\n }\n else {\n this.error();\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '[') {\n node.add(this.arrltr());\n }\n else if(this.look.content() == '@dir') {\n node.add(this.dir());\n }\n else if(this.look.type() == Token.KEYWORD || this.look.type() == Token.HACK) {\n node.add(this.style(null, true, true));\n }\n else {\n node.add(this.value(null, true));\n }\n return node;\n },\n styleset: function(kf) {\n var node = new Node(Node.STYLESET);\n node.add(this.selectors(kf));\n //兼容less的继承写法,即只写一个选择器\n if(this.look && [';', '}'].indexOf(this.look.content()) > -1) {\n node.name(Node.EXTEND);\n var extend = new Token(Token.VIRTUAL, '@extend');\n extend = new Node(Node.TOKEN, extend);\n node.addFirst(extend);\n return node;\n }\n node.add(this.block());\n return node;\n },\n selectors: function(kf) {\n var node = new Node(Node.SELECTORS);\n node.add(this.selector(kf));\n while(this.look && this.look.content() == ',') {\n node.add(this.match());\n node.add(this.selector(kf));\n }\n return node;\n },\n selector: function(kf) {\n var node = new Node(Node.SELECTOR);\n if(!this.look) {\n this.error();\n }\n if(kf && this.look.type() == Token.NUMBER) {\n node.add(this.match());\n node.add(this.match('%'));\n }\n else {\n var s = this.look.content().toLowerCase();\n if(s == '[' && this.look.type() != Token.HACK) {\n this.bracket1(node);\n }\n else {\n node.add(this.match([Token.SELECTOR, Token.PSEUDO, Token.HACK, Token.VARS]));\n }\n while(this.look && [',', ';', '{', '}'].indexOf(this.look.content()) == -1) {\n if(this.look.content() == '[' && this.look.type() != Token.HACK) {\n this.bracket1(node);\n }\n else if(this.look.content() == '(') {\n this.bracket2(node);\n }\n else {\n node.add(this.match([Token.SELECTOR, Token.PSEUDO, Token.SIGN, Token.HACK, Token.VARS]));\n }\n }\n }\n return node;\n },\n bracket1: function(node) {\n node.add(this.match());\n while(this.look && [']', '(', ')'].indexOf(this.look.content()) == -1) {\n node.add(this.match([Token.ATTR, Token.SIGN, Token.VARS, Token.NUMBER, Token.UNITS, Token.STRING]));\n }\n node.add(this.match(']'));\n },\n bracket2: function(node) {\n node.add(this.match());\n while(this.look && this.look.content() != ')') {\n if(this.look.content() == '[') {\n this.bracket1(node);\n }\n if(this.look && this.look.content() == ')') {\n break;\n }\n node.add(this.match([Token.SELECTOR, Token.PSEUDO, Token.VARS, Token.NUMBER, Token.UNITS]));\n }\n },\n block: function(kf) {\n var node = new Node(Node.BLOCK);\n node.add(this.match('{'));\n while(this.look\n && this.look.content() != '}') {\n if(this.look.type() == Token.SELECTOR\n || this.look.content() == '['\n && this.look.type() != Token.HACK) {\n node.add(this.styleset());\n }\n else if(kf && this.look.type() == Token.NUMBER) {\n node.add(this.styleset(kf));\n }\n else if(this.look.type() == Token.HEAD) {\n node.add(this.head());\n }\n else if(this.look.type() == Token.VARS) {\n var isFnCall = false;\n var isDecl = false;\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n isFnCall = t.content() == '(';\n isDecl = [':', '='].indexOf(t.content()) > -1;\n break;\n }\n }\n if(isFnCall) {\n node.add(this.fnc());\n }\n else if(isDecl) {\n node.add(this.varstmt());\n }\n else {\n node.add(this.addexpr());\n if(this.look && this.look.content() == ':') {\n node.add(\n this.match(),\n this.value()\n );\n }\n else {\n node.add(this.match(';'));\n }\n }\n }\n else if(this.look.content() == ';') {\n node.add(this.match());\n }\n else {\n node.add(this.style());\n }\n }\n node.add(this.match('}'));\n return node;\n },\n style: function(name, noS, noC) {\n var node = new Node(Node.STYLE);\n var k = this.key(name);\n node.add(k);\n var first = k.first();\n if(first.token().type() == Token.HACK) {\n first = first.next();\n }\n name = first.token().content().toLowerCase();\n node.add(this.match(':'));\n node.add(this.value(name, noC));\n while(this.look && this.look.type() == Token.HACK) {\n node.add(this.match());\n }\n if(!noS) {\n node.add(this.match(';'));\n }\n return node;\n },\n key: function(name) {\n var node = new Node(Node.KEY);\n while(this.look && this.look.type() == Token.HACK) {\n node.add(this.match());\n }\n if(!this.look) {\n this.error();\n }\n if(name) {\n if(this.look.type() == Token.VARS) {\n node.add(this.match());\n }\n else {\n node.add(this.match(name));\n }\n }\n else {\n node.add(this.addexpr([Token.STRING, Token.KEYWORD]));\n }\n return node;\n },\n value: function(name, noComma) {\n var node = new Node(Node.VALUE);\n if(!this.look) {\n this.error();\n }\n var s = this.look.content().toLowerCase();\n if(s == '~'\n && this.tokens[this.index]\n && [Token.VARS, Token.STRING].indexOf(this.tokens[this.index].type()) > -1) {\n node.add(this.unbox());\n return node;\n }\n var pCount = 0;\n var bCount = 0;\n if([Token.COLOR, Token.HACK, Token.VARS, Token.ID, Token.PROPERTY, Token.NUMBER, Token.STRING, Token.HEAD, Token.SIGN, Token.UNITS, Token.KEYWORD].indexOf(this.look.type()) > -1\n && [';', '}'].indexOf(s) == -1) {\n //内置函数必须后跟(\n var next = this.tokens[this.index] && this.tokens[this.index].content() == '(';\n switch(s) {\n case 'var':\n node.add(next ? this.vars() : this.match());\n break;\n case 'url':\n node.add(next ? this.url() : this.match());\n break;\n case 'format':\n node.add(next ? this.format() : this.match());\n break;\n case 'rgb':\n node.add(next ? this.rgb() : this.match());\n break;\n case 'rgba':\n node.add(next ? this.rgb(true) : this.match());\n break;\n case 'hsl':\n node.add(next ? this.hsl() : this.match());\n break;\n case 'hsla':\n node.add(next ? this.hsl(true) : this.match());\n break;\n case 'max':\n node.add(next ? this.minmax(true) : this.match());\n break;\n case 'min':\n node.add(next ? this.minmax() : this.match());\n break;\n case 'calc':\n node.add(next ? this.calc() : this.match());\n break;\n //这几个语法完全一样\n //cycle是toggle的老版本写法\n case 'cycle':\n case 'toggle':\n case 'counter':\n case 'attr':\n case 'translate':\n case 'rect':\n case 'translate3d':\n case 'translatex':\n case 'translatey':\n case 'translatez':\n case 'rotate':\n case 'rotate3d':\n case 'rotatex':\n case 'rotatey':\n case 'rotatez':\n case 'scale':\n case 'scale3d':\n case 'scalex':\n case 'scaley':\n case 'scalez':\n node.add(next ? this.counter(s) : this.match());\n break;\n case 'linear-gradient':\n case 'repeating-linear-gradient':\n node.add(next ? this.lg() : this.match());\n break;\n case 'radial-gradient':\n case 'repeating-radial-gradient':\n node.add(next ? this.rg() : this.match());\n break;\n case 'alpha':\n case 'blur':\n case 'chroma':\n case 'dropshadow':\n case 'fliph':\n case 'flipv':\n case 'glow':\n case 'gray':\n case 'invert':\n case 'light':\n case 'mask':\n case 'shadow':\n case 'wave':\n case 'xray':\n case 'dximagetransform.microsoft.gradient':\n node.add(next ? this.filter() : this.match());\n break;\n default:\n if(s == '(') {\n pCount++;\n }\n else if(s == ')') {\n this.error();\n }\n else if(noComma && s == ',') {\n this.error();\n }\n else if(s == '[') {\n bCount++;\n }\n else if(s == ']') {\n if(bCount == 0) {\n return node;\n }\n bCount--;\n }\n //LL2确定是否是fncall\n var fncall = false;\n if(this.look.type() == Token.VARS) {\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n if(t.content() == '(') {\n fncall = true;\n }\n break;\n }\n }\n }\n if(fncall) {\n node.add(this.fnc());\n }\n else if(NO_MTPL.hasOwnProperty(name)) {\n node.add(this.addexpr(undefined, null, true));\n }\n else {\n node.add(this.addexpr());\n }\n break;\n }\n }\n else {\n this.error();\n }\n outer:\n while(this.look) {\n s = this.look.content().toLowerCase();\n if([Token.COLOR, Token.HACK, Token.VARS, Token.ID, Token.PROPERTY, Token.NUMBER, Token.STRING, Token.HEAD, Token.KEYWORD, Token.SIGN, Token.UNITS, Token.KEYWORD].indexOf(this.look.type()) > -1\n && [';', '}'].indexOf(this.look.content()) == -1) {\n //内置函数必须后跟(\n var next = this.tokens[this.index] && this.tokens[this.index].content() == '(';\n switch(s) {\n case 'var':\n node.add(next ? this.vars() : this.match());\n break;\n case 'url':\n node.add(next ? this.url() : this.match());\n break;\n case 'format':\n node.add(next ? this.format() : this.match());\n break;\n case 'rgb':\n node.add(next ? this.rgb() : this.match());\n break;\n case 'rgba':\n node.add(next ? this.rgb(true) : this.match());\n break;\n case 'hsl':\n node.add(next ? this.hsl() : this.match());\n break;\n case 'hsla':\n node.add(next ? this.hsl(true) : this.match());\n break;\n case 'min':\n node.add(next ? this.minmax() : this.match());\n break;\n case 'max':\n node.add(next ? this.minmax(true) : this.match());\n break;\n case 'calc':\n node.add(next ? this.calc() : this.match());\n break;\n //这几个语法完全一样\n //cycle是toggle的老版本写法\n case 'cycle':\n case 'toggle':\n case 'counter':\n case 'attr':\n case 'translate':\n case 'rect':\n case 'translate3d':\n case 'translatex':\n case 'translatey':\n case 'translatez':\n case 'rotate':\n case 'rotate3d':\n case 'rotatex':\n case 'rotatey':\n case 'rotatez':\n case 'scale':\n case 'scale3d':\n case 'scalex':\n case 'scaley':\n case 'scalez':\n node.add(next ? this.counter(s) : this.match());\n break;\n case 'linear-gradient':\n case 'repeating-linear-gradient':\n node.add(next ? this.lg() : this.match());\n break;\n case 'radial-gradient':\n case 'repeating-radial-gradient':\n node.add(next ? this.rg() : this.match());\n break;\n case 'alpha':\n case 'blur':\n case 'chroma':\n case 'dropshadow':\n case 'fliph':\n case 'flipv':\n case 'glow':\n case 'gray':\n case 'invert':\n case 'light':\n case 'mask':\n case 'shadow':\n case 'wave':\n case 'xray':\n case 'dximagetransform.microsoft.gradient':\n node.add(next ? this.filter() : this.match());\n break;\n default:\n if(s == '(') {\n pCount++;\n }\n else if(s == ')') {\n pCount--;\n if(pCount < 0) {\n break outer;\n }\n }\n else if(noComma && s == ',') {\n break outer;\n }\n else if(s == '[') {\n bCount++;\n }\n else if(s == ']') {\n if(bCount == 0) {\n return node;\n }\n bCount--;\n }\n else if(s == '~'\n && this.tokens[this.index]\n && [Token.VARS, Token.STRING].indexOf(this.tokens[this.index].type()) > -1) {\n node.add(this.unbox());\n break;\n }\n //LL2确定是否是fncall\n var fncall = false;\n if(this.look.type() == Token.VARS) {\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n if(t.content() == '(') {\n fncall = true;\n }\n break;\n }\n }\n }\n if(fncall) {\n node.add(this.fnc());\n }\n else if(NO_MTPL.hasOwnProperty(name)) {\n node.add(this.addexpr(undefined, null, true));\n }\n else {\n node.add(this.addexpr());\n }\n break;\n }\n }\n else {\n break;\n }\n }\n if(this.look && this.look.type() == Token.IMPORTANT) {\n node.add(this.match());\n }\n return node;\n },\n rg: function() {\n var node = new Node(Node.RADIOGRADIENT);\n node.add(\n this.match(),\n this.match('(')\n );\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.NUMBER\n || ['left', 'center', 'right'].indexOf(this.look.content().toLowerCase()) > -1) {\n node.add(this.pos());\n node.add(this.match(','));\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.NUMBER) {\n node.add(this.len());\n node.add(this.len());\n }\n else {\n node.add(this.match(['circle', 'ellipse', 'closest-side', 'closest-corner', 'farthest-side', 'farthest-corner', 'contain', 'cover']));\n }\n node.add(this.match(','), this.colorstop());\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.colorstop()\n );\n }\n node.add(this.match(')'));\n return node;\n },\n pos: function() {\n var node = new Node(Node.POS);\n if(this.look.type() == Token.NUMBER) {\n node.add(this.len());\n }\n else {\n node.add(this.match(['left', 'center', 'right']));\n }\n if(this.look) {\n if(this.look.type() == Token.NUMBER) {\n node.add(this.len());\n }\n else if(['top', 'center', 'bottom'].indexOf(this.look.content().toLowerCase()) > -1){\n node.add(this.match());\n }\n }\n return node;\n },\n len: function() {\n var node = new Node(Node.LEN);\n var isZeror = this.look.content() == '0';\n node.add(this.match(Token.NUMBER));\n if(this.look && this.look.type() == Token.UNITS) {\n node.add(this.match());\n }\n else if(!isZeror) {\n this.error();\n }\n return node;\n },\n lg: function() {\n var node = new Node(Node.LINEARGRADIENT);\n node.add(\n this.match(),\n this.match('(')\n );\n if(!this.look) {\n this.error();\n }\n switch(this.look.type()) {\n case Token.NUMBER:\n case Token.PROPERTY:\n case Token.ID:\n node.add(this.point());\n node.add(this.match(','));\n break;\n }\n node.add(\n this.colorstop(),\n this.match(','),\n this.colorstop()\n );\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.colorstop()\n );\n }\n node.add(this.match(')'));\n return node;\n },\n point: function() {\n var node = new Node(Node.POINT);\n if(this.look.type() == Token.NUMBER) {\n node.add(\n this.match(),\n this.match('deg')\n );\n }\n else {\n if(this.look && this.look.content().toLowerCase() == 'to') {\n node.add(this.match());\n }\n node.add(this.match(['left', 'right', 'top', 'bottom', 'center']));\n if(this.look && this.look.content().toLowerCase() == 'to') {\n node.add(this.match());\n }\n if(this.look && this.look.type() == Token.PROPERTY) {\n node.add(this.match(['left', 'right', 'top', 'bottom', 'center']));\n }\n }\n return node;\n },\n colorstop: function() {\n var node = new Node(Node.COLORSTOP);\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.COLOR) {\n node.add(this.match(Token.COLOR));\n }\n else {\n switch(this.look.content()) {\n case 'rgb':\n node.add(this.rgb());\n break;\n case 'rgba':\n node.add(this.rgb(true));\n break;\n case 'hsl':\n node.add(this.hsl());\n break;\n case 'hsla':\n node.add(this.hsl(true));\n break;\n default:\n this.error();\n }\n }\n if(this.look\n && this.look.type() == Token.NUMBER) {\n var isZero = this.look.content() == '0';\n node.add(this.match());\n if(this.look && this.look.type() == Token.UNITS) {\n node.add(this.match());\n }\n else if(!isZero) {\n this.error();\n }\n }\n return node;\n },\n minmax: function(max) {\n var node = new Node(max ? Node.MAX : Node.MIN);\n node.add(\n this.match(),\n this.match('(')\n );\n node.add(this.param());\n while(this.look && this.look.content() == ',') {\n node.add(this.match());\n node.add(this.param());\n }\n node.add(this.match(')'));\n return node;\n },\n param: function(expr) {\n var node = new Node(Node.PARAM);\n var s = this.look.content().toLowerCase();\n if([Token.COLOR, Token.HACK, Token.VARS, Token.ID, Token.PROPERTY, Token.NUMBER, Token.STRING, Token.HEAD, Token.SIGN, Token.UNITS, Token.KEYWORD].indexOf(this.look.type()) > -1\n && [';', '}', ')', ','].indexOf(s) == -1) {\n node.add(expr ? this.addexpr() : this.match());\n }\n else {\n this.error();\n }\n while(this.look) {\n s = this.look.content().toLowerCase();\n if([Token.COLOR, Token.HACK, Token.VARS, Token.ID, Token.PROPERTY, Token.NUMBER, Token.STRING, Token.HEAD, Token.KEYWORD, Token.SIGN, Token.UNITS, Token.KEYWORD].indexOf(this.look.type()) > -1\n && [';', '}', ')', ','].indexOf(this.look.content()) == -1) {\n node.add(expr ? this.addexpr() : this.match());\n }\n else {\n break;\n }\n }\n return node;\n },\n vars: function() {\n var node = new Node(Node.VARS);\n node.add(\n this.match(),\n this.match('('),\n this.addexpr(),\n this.match(')')\n );\n return node;\n },\n calc: function() {\n var node = new Node(Node.CALC);\n node.add(\n this.match(),\n this.match('(')\n );\n var count = 0;\n while(this.look) {\n var s = this.look.content();\n if([';', '}'].indexOf(s) > -1) {\n this.error();\n }\n else if(s == '(') {\n count++;\n }\n else if(s == ')') {\n if(count-- == 0) {\n break;\n }\n }\n node.add(this.match());\n }\n node.add(this.match(')'));\n return node;\n },\n counter: function(name) {\n var node = new Node(Node[name.toUpperCase()]);\n node.add(\n this.match(),\n this.match('('),\n this.param(true)\n );\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.param(true)\n );\n }\n node.add(this.match(')'));\n return node;\n },\n filter: function() {\n var node = new Node(Node.FILTER);\n var isFn = false;\n for(var i = this.index; i < this.length; i++) {\n var t = this.tokens[i];\n if(!S.hasOwnProperty(t.type())) {\n isFn = t.content() == '(';\n break;\n }\n }\n if(!isFn) {\n return this.match();\n }\n node.add(\n this.match(),\n this.match('(')\n );\n node.add(this.param(true));\n while(this.look && this.look.content() == ',') {\n node.add(\n this.match(),\n this.param(true)\n );\n }\n node.add(this.match(')'));\n return node;\n },\n rgb: function(alpha) {\n var node = new Node(alpha ? Node.RGBA : Node.RGB);\n node.add(\n this.match(),\n this.match('('),\n this.addexpr(Token.NUMBER),\n this.match(','),\n this.addexpr(Token.NUMBER),\n this.match(','),\n this.addexpr(Token.NUMBER)\n );\n if(alpha) {\n node.add(\n this.match(','),\n this.addexpr(Token.NUMBER)\n );\n }\n node.add(this.match(')'));\n return node;\n },\n hsl: function(alpha) {\n var node = new Node(alpha ? Node.HSLA : Node.HSL);\n node.add(\n this.match(),\n this.match('('),\n this.addexpr(Token.NUMBER),\n this.match(',')\n );\n var isZero = this.look && this.look.content() == '0';\n var isVar = this.look && this.look.type() == Token.VARS;\n node.add(this.addexpr(Token.NUMBER, true));\n if(this.look && this.look.content() == '%') {\n node.add(this.match());\n }\n else if(!isZero && !isVar) {\n this.error();\n }\n node.add(this.match(','));\n var isZero = this.look && this.look.content() == '0';\n var isVar = this.look && this.look.type() == Token.VARS;\n node.add(this.addexpr(Token.NUMBER, true));\n if(this.look && this.look.content() == '%') {\n node.add(this.match());\n }\n else if(!isZero && !isVar) {\n this.error();\n }\n if(alpha) {\n node.add(\n this.match(','),\n this.addexpr(Token.NUMBER)\n );\n }\n node.add(this.match(')'));\n return node;\n },\n url: function(ellipsis) {\n if(!this.look) {\n this.error();\n }\n var node = new Node(Node.URL);\n if(ellipsis && this.look.type() == Token.STRING) {\n if(this.look.content().charAt(0) == '\"') {\n node.add(this.match());\n }\n else {\n this.error('missing quotation');\n }\n }\n else {\n node.add(\n this.match('url'),\n this.match('(')\n );\n if(this.look && this.look.content() != ')') {\n node.add(this.addexpr(Token.STRING));\n }\n node.add(this.match(')'));\n }\n return node;\n },\n format: function() {\n var node = new Node(Node.FORMAT);\n node.add(this.match());\n node.add(this.match('('));\n node.add(this.addexpr(Token.STRING));\n node.add(this.match(')'));\n return node;\n },\n addexpr: function(accepts, noUnit, noMtpl) {\n if(accepts && !Array.isArray(accepts)) {\n accepts = [accepts];\n }\n if(accepts && accepts.indexOf(Token.VARS) == -1) {\n accepts = accepts.concat([Token.VARS]);\n }\n if(accepts && accepts.indexOf(Token.NUMBER) == -1) {\n accepts = accepts.concat([Token.NUMBER]);\n }\n var node = new Node(Node.ADDEXPR);\n var mtplexpr = this.mtplexpr(accepts, noUnit, noMtpl);\n if(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(mtplexpr);\n while(this.look && ['+', '-'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.mtplexpr(accepts, noUnit, noMtpl)\n );\n if(!noUnit && this.look && this.look.type() == Token.UNITS) {\n node.add(this.match());\n }\n }\n }\n else {\n return mtplexpr;\n }\n return node;\n },\n mtplexpr: function(accepts, noUnit, noMtpl) {\n var node = new Node(Node.MTPLEXPR);\n var prmrexpr = this.prmrexpr(accepts, noUnit);\n if(!noMtpl && this.look && ['*', '/'].indexOf(this.look.content()) != -1) {\n node.add(prmrexpr);\n while(this.look && ['*', '/'].indexOf(this.look.content()) != -1) {\n node.add(\n this.match(),\n this.prmrexpr(accepts)\n );\n if(!noUnit && this.look && this.look.type() == Token.UNITS) {\n node.add(this.match());\n }\n }\n }\n else {\n return prmrexpr;\n }\n return node;\n },\n prmrexpr: function(accepts, noUnit) {\n var node = new Node(Node.PRMREXPR);\n if(this.look && this.look.content() == '(') {\n node.add(\n this.match('('),\n this.addexpr(accepts, noUnit),\n this.match(')')\n );\n return node;\n }\n if(this.look.content() == '@basename') {\n return this.basename();\n }\n else if(this.look.content() == '@extname') {\n return this.extname();\n }\n else if(this.look.content() == '@width') {\n return this.width();\n }\n else if(this.look.content() == '@height') {\n return this.height();\n }\n //紧接着的(说明这是个未知的css内置id()\n var next = this.tokens[this.index];\n if(next && next.content() == '('\n && [Token.PROPERTY, Token.ID].indexOf(this.look.type()) > -1) {\n return this.bracket();\n }\n var temp = this.match(accepts);\n if(!noUnit && this.look && this.look.type() == Token.UNITS) {\n temp = [temp, this.match()];\n }\n return temp;\n },\n bracket: function() {\n var node = new Node(Node.BRACKET);\n node.add(\n this.match([Token.ID, Token.PROPERTY]),\n this.match('(')\n );\n while(this.look && this.look.content() != ')') {\n node.add(this.addexpr());\n }\n node.add(this.match(')'));\n return node;\n },\n ifstmt: function() {\n var node = new Node(Node.IFSTMT);\n node.add(\n this.match(),\n this.match('('),\n this.eqstmt(),\n this.match(')'),\n this.block()\n );\n if(this.look) {\n if(this.look.content() == '@elseif') {\n node.add(this.ifstmt());\n }\n else if(this.look.content() == '@else') {\n node.add(this.match(), this.block());\n }\n }\n return node;\n },\n forstmt: function() {\n var node = new Node(Node.FORSTMT);\n node.add(\n this.match(),\n this.match('(')\n );\n var type = 0; //0为普通,1为in,2为of\n //in和of和普通语句三种区分\n //debugger\n for(var i = this.index; i < this.length; i++) {\n var token = this.tokens[i];\n if(!S[token.type()]) {\n if(token.content() == 'in') {\n type = 1;\n }\n else if(token.content() == 'of') {\n type = 2;\n }\n break;\n }\n }\n if(type == 0) {\n //@for(varstmt ; expr ; epxr)\n if(this.look.content() != ';') {\n node.add(this.varstmt());\n }\n else {\n node.add(this.match(';'));\n }\n node.add(this.eqstmt());\n node.add(this.match(';'));\n node.add(this.eqstmt());\n }\n else if(type == 1) {\n //@for($var in expr)\n node.add(\n this.match(Token.VARS),\n this.match('in'),\n this.exprstmt()\n );\n }\n else if(type == 2) {\n //@for($var of expr)\n node.add(\n this.match(Token.VARS),\n this.match('of'),\n this.exprstmt()\n );\n }\n node.add(this.match(')'));\n node.add(this.block());\n return node;\n },\n varstmt: function() {\n var node = new Node(Node.VARSTMT);\n node.add(this.vardecl());\n while(this.look && this.look.content() == ',') {\n node.add(this.match(), this.vardecl());\n }\n node.add(this.match(';'));\n return node;\n },\n exprstmt: function() {\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '@dir') {\n return this.dir();\n }\n return this.eqstmt();\n },\n eqstmt: function() {\n var node = new Node(Node.EQSTMT);\n var relstmt = this.relstmt();\n if(this.look && {\n '==': true,\n '!=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n relstmt,\n this.match(),\n this.relstmt()\n );\n }\n else {\n return relstmt;\n }\n return node;\n },\n relstmt: function() {\n var node = new Node(Node.RELSTMT);\n var addstmt = this.addstmt();\n if(this.look && {\n '>': true,\n '<': true,\n '>=': true,\n '<=': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n addstmt,\n this.match(),\n this.addstmt()\n );\n }\n else {\n return addstmt;\n }\n return node;\n },\n addstmt: function() {\n if(this.look.content() == '@basename') {\n return this.basename();\n }\n else if(this.look.content() == '@extname') {\n return this.extname();\n }\n var node = new Node(Node.ADDSTMT);\n var mtplstmt = this.mtplstmt();\n if(this.look && {\n '+': true,\n '-': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n mtplstmt,\n this.match(),\n this.mtplstmt()\n );\n while(this.look && {\n '+': true,\n '-': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n mtplstmt,\n this.match(),\n this.mtplstmt()\n );\n }\n }\n else {\n return mtplstmt;\n }\n return node;\n },\n mtplstmt: function() {\n var node = new Node(Node.MTPLSTMT);\n var postfixstmt = this.postfixstmt();\n if(this.look && {\n '*': true,\n '/': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n postfixstmt,\n this.match(),\n this.postfixstmt()\n );\n while(this.look && {\n '*': true,\n '/': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n postfixstmt,\n this.match(),\n this.postfixstmt()\n );\n }\n }\n else {\n return postfixstmt;\n }\n return node;\n },\n postfixstmt: function() {\n if(this.look.content() == '@width') {\n return this.width();\n }\n else if(this.look.content() == '@height') {\n return this.height();\n }\n var node = new Node(Node.POSTFIXSTMT);\n var prmrstmt = this.prmrstmt();\n if(this.look && {\n '++': true,\n '--': true\n }.hasOwnProperty(this.look.content())) {\n node.add(\n prmrstmt,\n this.match()\n );\n }\n else {\n return prmrstmt;\n }\n return node;\n },\n prmrstmt: function() {\n var node = new Node(Node.PRMRSTMT);\n switch(this.look.type()) {\n case Token.VARS:\n case Token.NUMBER:\n case Token.STRING:\n node.add(this.match());\n break;\n default:\n switch(this.look.content()) {\n case '(':\n node.add(\n this.match(),\n this.eqstmt(),\n this.match(')')\n );\n break;\n case '[':\n return this.arrltr();\n default:\n this.error();\n }\n }\n return node;\n },\n arrltr: function() {\n var node = new Node(Node.ARRLTR);\n node.add(this.match('['));\n while(this.look && this.look.content() != ']') {\n if(this.look.content() == ',') {\n node.add(this.match());\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.type() == Token.KEYWORD || this.look.type() == Token.HACK) {\n node.add(this.style(null, true, true));\n }\n else {\n node.add(this.value(null, true));\n }\n }\n node.add(this.match(']'));\n return node;\n },\n dir: function() {\n var node = new Node(Node.DIR);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n basename: function() {\n var node = new Node(Node.BASENAME);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n extname: function() {\n var node = new Node(Node.EXTNAME);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n width: function() {\n var node = new Node(Node.WIDTH);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n height: function() {\n var node = new Node(Node.HEIGHT);\n node.add(\n this.match(),\n this.cparams()\n );\n return node;\n },\n unbox: function() {\n var node = new Node(Node.UNBOX);\n node.add(\n this.match('~'),\n this.match([Token.VARS, Token.STRING])\n );\n return node;\n },\n match: function(type, msg) {\n //未定义为所有\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //数组为其中一个即可\n else if(Array.isArray(type)) {\n if(this.look) {\n for(var i = 0, len = type.length; i < len; i++) {\n var t = type[i];\n if(typeof t == 'string' && this.look.content() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else if(typeof t == 'number' && this.look.type() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n }\n }\n this.error('missing ' + type.join('|') + (msg || ''));\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n if(this.look && this.look.content().toLowerCase() == type) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else if(type == ';' && this.look && this.look.content() == '}') {\n var l = new Token(Token.VIRTUAL, ';');\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n },\n error: function(msg) {\n msg = 'SyntaxError: ' + (msg || ' syntax error');\n throw new Error(msg + ' line ' + this.lastLine + ' col ' + this.lastCol + ' look ' + (this.look && this.look.content()));\n },\n move: function() {\n this.lastLine = this.line;\n this.lastCol = this.col;\n do {\n this.look = this.tokens[this.index++];\n if(!this.look) {\n return;\n }\n //存下忽略的token\n if([Token.BLANK, Token.TAB, Token.ENTER, Token.LINE, Token.COMMENT, Token.IGNORE].indexOf(this.look.type()) != -1) {\n this.ignores[this.index - 1] = this.look;\n }\n if(this.look.type() == Token.LINE) {\n this.line++;\n this.col = 1;\n }\n else if(this.look.type() == Token.COMMENT) {\n var s = this.look.content(),\n n = character.count(s, character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n }\n }\n else if(this.look.type() == Token.IGNORE) {\n var s = this.look.content(),\n n = character.count(s, character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n }\n }\n else {\n this.col += this.look.content().length;\n if([Token.BLANK, Token.TAB, Token.ENTER].indexOf(this.look.type()) == -1) {\n break;\n }\n }\n } while(this.index <= this.length);\n },\n ignore: function() {\n return this.ignores;\n }\n});\nmodule.exports = Parser;","var INode = require('../Node');\nvar Node = INode.extend(function(type, children) {\n INode.call(this, type, children);\n return this;\n}).statics({\n DOCUMENT: 'document',\n ELEMENT: 'element',\n SelfClosingElement: 'SelfClosingElement',\n OpeningElement: 'OpeningElement',\n ClosingElement: 'ClosingElement',\n Attribute: 'Attribute',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;","var IParser = require('../Parser');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/HtmlLexer');\nvar Rule = require('../../lexer/rule/HtmlRule');\nvar Token = require('../../lexer/HtmlToken');\nvar Node = require('./Node');\nvar S = {};\nS[Token.BLANK] = S[Token.TAB] = S[Token.COMMENT] = S[Token.LINE] = S[Token.ENTER] = true;\nvar SINGLE = {\n 'img': true,\n 'meta': true,\n 'link': true,\n '!doctype': true,\n 'br': true,\n 'basefont': true,\n 'base': true,\n 'col': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'input': true,\n 'keygen': true,\n 'area': true,\n 'param': true,\n 'source': true,\n 'track': true\n};\n\nvar Parser = IParser.extend(function(lexer) {\n IParser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n parse: function(code) {\n this.lexer.parse(code);\n this.tree = this.document();\n return this.tree;\n },\n init: function(lexer) {\n this.look = null;\n this.tokens = null;\n this.lastLine = 1;\n this.lastCol = 1;\n this.line = 1;\n this.col = 1;\n this.index = 0;\n this.length = 0;\n this.ignores = {};\n this.hasMoveLine = false;\n this.tree = {};\n if(lexer) {\n this.lexer = lexer;\n }\n else if(this.lexer) {\n this.lexer.init();\n }\n else {\n this.lexer = new Lexer(new Rule());\n }\n },\n document: function() {\n this.tokens = this.lexer.tokens();\n this.length = this.tokens.length;\n if(this.tokens.length) {\n this.move();\n }\n var node = new Node(Node.DOCUMENT);\n var first = true;\n while(this.look) {\n node.add(this.element(first));\n first = false;\n }\n return node;\n },\n element: function(first) {\n if(this.look.type() == Token.TEXT) {\n return this.match();\n }\n else {\n var node = new Node(Node.OpeningElement);\n node.add(\n this.match('<'),\n this.elemname(first)\n );\n var name = node.last().token().content();\n while(this.look && this.look.type() == Token.PROPERTY) {\n node.add(this.attr());\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '/>') {\n node.add(this.match());\n node.name(Node.SelfClosingElement);\n return node;\n }\n node.add(this.match('>'));\n if(SINGLE.hasOwnProperty(name.toLowerCase())) {\n node.name(Node.SelfClosingElement);\n return node;\n }\n var n = new Node(Node.ELEMENT);\n n.add(node);\n while(this.look && this.look.content() != '</') {\n n.add(this.element());\n }\n n.add(this.close(name));\n return n;\n }\n },\n elemname: function(first) {\n if(!this.look) {\n this.error();\n }\n if(first && this.look.type() == Token.DOC) {\n return this.match();\n }\n return this.match(Token.ELEM);\n },\n attr: function() {\n var node = new Node(Node.Attribute);\n node.add(this.match(Token.PROPERTY));\n if(this.look && this.look.content() == '=') {\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n switch(this.look.type()) {\n case Token.STRING:\n case Token.NUMBER:\n case Token.PROPERTY:\n node.add(this.match());\n break;\n default:\n this.error();\n }\n }\n return node;\n },\n close: function(name) {\n var node = new Node(Node.ClosingElement);\n node.add(\n this.match('</'),\n this.match(name),\n this.match('>')\n );\n return node;\n },\n match: function(type, line, msg) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && this.hasMoveLine)\n || this.look.content() == '}')\n ) {\n if(this.look && S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n },\n move: function(line) {\n this.lastLine = this.line;\n this.lastCol = this.col;\n //遗留下来的换行符\n this.hasMoveLine = false;\n do {\n this.look = this.tokens[this.index++];\n if(!this.look) {\n return;\n }\n //存下忽略的token\n if(S[this.look.type()]) {\n this.ignores[this.index - 1] = this.look;\n }\n //包括line的情况下要跳出\n if(this.look.type() == Token.LINE) {\n this.line++;\n this.col = 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n else if(this.look.type() == Token.COMMENT) {\n var s = this.look.content();\n var n = character.count(this.look.content(), character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n }\n else {\n this.col += this.look.content().length;\n if(!S[this.look.type()]) {\n break;\n }\n }\n } while(this.index <= this.length);\n },\n error: function(msg) {\n msg = 'SyntaxError: ' + (msg || ' syntax error');\n throw new Error(msg + ' line ' + this.lastLine + ' col ' + this.lastCol);\n }\n});\nmodule.exports = Parser;","var Es6Node = require('../es6/Node');\nvar Node = Es6Node.extend(function(type, children) {\n Es6Node.call(this, type, children);\n return this;\n}).statics({\n JSXElement: 'JSXElement',\n JSXSelfClosingElement: 'JSXSelfClosingElement',\n JSXOpeningElement: 'JSXOpeningElement',\n JSXClosingElement: 'JSXClosingElement',\n JSXChild: 'JSXChild',\n JSXSpreadAttribute: 'JSXSpreadAttribute',\n JSXAttribute: 'JSXAttribute',\n JSXBindAttribute: 'JSXBindAttribute',\n JSXNamespacedName: 'JSXNamespacedName',\n JSXMemberExpression: 'JSXMemberExpression',\n JSXAttributes: 'JSXAttributes',\n JSXAttributeValue: 'JSXAttributeValue',\n JSXFragment: 'JSXFragment',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;\n","var Es6Parser = require('../es6/Parser');\nvar Node = require('./Node');\nvar Token = require('../../lexer/JSXToken');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/JSXLexer');\n\nvar Parser = Es6Parser.extend(function(lexer) {\n Es6Parser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n prmrexpr: function() {\n if(this.look.type() == Token.MARK) {\n var next = this.tokens[this.index];\n if(next && next.content() == '>') {\n return this.jsxfragment();\n }\n return this.jsxelem();\n }\n else {\n return Es6Parser.prototype.prmrexpr.call(this);\n }\n },\n jsxfragment: function() {\n var node = new Node(Node.JSXFragment);\n node.add(\n this.match('<'),\n this.match('>')\n );\n while(this.look && this.look.content() != '</') {\n node.add(this.jsxchild());\n }\n node.add(\n this.match('</'),\n this.match('>')\n );\n return node;\n },\n jsxelem: function() {\n var node = new Node(Node.JSXOpeningElement);\n node.add(\n this.match(),\n this.jsxelemname()\n );\n //id只有1个,member和namespace有多个\n var type = node.last().size() > 1 ? node.last().name() : null;\n var name;\n if(type) {\n name = [];\n node.last().leaves().forEach(function(leaf) {\n name.push(leaf.token().content());\n });\n }\n else {\n name = node.last().token().content();\n }\n while(this.look) {\n if(this.look.type() == Token.BIND_PROPERTY) {\n node.add(this.bindAttr());\n }\n else if(this.look.type() == Token.PROPERTY) {\n node.add(this.attr());\n }\n else if(this.look.content() == '{') {\n node.add(this.spreadattr());\n }\n else {\n break;\n }\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '/>') {\n node.add(this.match());\n node.name(Node.JSXSelfClosingElement);\n return node;\n }\n node.add(this.match('>'));\n var n = new Node(Node.JSXElement);\n n.add(node);\n while(this.look && this.look.content() != '</') {\n n.add(this.jsxchild());\n }\n n.add(this.close(name, type));\n return n;\n },\n jsxelemname: function(name, type) {\n if(name) {\n if(type) {\n var node = new Node(type);\n var self = this;\n name.forEach(function(na) {\n node.add(self.match(na));\n });\n return node;\n }\n else {\n return this.match(name);\n }\n }\n else {\n var node = new Node(Node.JSXMemberExpression);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '.') {\n while(this.look && this.look.content() == '.') {\n node.add(\n this.match(),\n this.match(Token.ELEM)\n );\n }\n }\n else if(this.look.content() == ':') {\n while(this.look && this.look.content() == ':') {\n node.add(\n this.match(),\n this.match(Token.ELEM)\n );\n }\n }\n else {\n return node.first();\n }\n return node;\n }\n },\n jsxmember: function(names) {\n var node = new Node(Node.JSXMemberExpression);\n names.forEach(function(name) {\n node.add(this.match(name));\n });\n return node;\n },\n bindAttr: function() {\n var node = new Node(Node.JSXBindAttribute);\n node.add(\n this.match(Token.BIND_PROPERTY),\n this.match('='),\n this.attrval()\n );\n return node;\n },\n attr: function() {\n var node = new Node(Node.JSXAttribute);\n node.add(\n this.attrname(),\n this.match('='),\n this.attrval()\n );\n return node;\n },\n spreadattr: function() {\n var node = new Node(Node.JSXSpreadAttribute);\n node.add(\n this.match(),\n this.match('...'),\n this.assignexpr(),\n this.match('}')\n );\n return node;\n },\n attrname: function() {\n var id = this.match(Token.PROPERTY);\n if(this.look && this.look.content() == ':') {\n var node = new Node(Node.JSXNamespacedName);\n node.add(id,\n this.match(),\n this.match(Token.PROPERTY)\n );\n return node;\n }\n return id;\n },\n attrval: function() {\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '{') {\n var node = new Node(Node.JSXAttributeValue);\n node.add(this.match());\n if(this.look && this.look.content() != '}') {\n node.add(this.assignexpr());\n }\n node.add(this.match('}'));\n return node;\n }\n else if(this.look.content() == '[') {\n var node = new Node(Node.JSXAttributeValue);\n node.add(this.match());\n while(this.look && this.look.content() != ']') {\n node.add(this.assignexpr());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match(']'));\n return node;\n }\n else if([Token.STRING, Token.NUMBER].indexOf(this.look.type()) > -1) {\n return this.match();\n }\n else if(this.look.content() == '<') {\n return this.jsxfragment();\n }\n return this.jsxelem();\n },\n jsxchild: function() {\n switch(this.look.type()) {\n case Token.TEXT:\n return this.match();\n case Token.MARK:\n var next = this.tokens[this.index];\n if(next && next.content() == '>') {\n return this.jsxfragment();\n }\n return this.jsxelem();\n default:\n var node = new Node(Node.JSXChild);\n node.add(this.match('{'));\n if(this.look && this.look.content() != '}') {\n node.add(this.assignexpr());\n }\n node.add(this.match('}'));\n return node;\n }\n },\n close: function(name, type) {\n var node = new Node(Node.JSXClosingElement);\n node.add(\n this.match('</'),\n this.jsxelemname(name, type),\n this.match('>')\n )\n return node;\n },\n match: function(type, line, msg) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //数组为其中一个即可\n else if(Array.isArray(type)) {\n if(this.look) {\n for(var i = 0, len = type.length; i < len; i++) {\n var t = type[i];\n if(typeof t == 'string' && this.look.content() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else if(typeof t == 'number' && this.look.type() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n }\n }\n this.error('missing ' + type.join('|') + (msg || ''));\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && this.hasMoveLine)\n || this.look.content() == '}')\n ) {\n if(this.look && Es6Parser.S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n }\n}).statics({\n SELF_CLOSE: Lexer.SELF_CLOSE\n});\n\nmodule.exports = Parser;\n","var Es6Node = require('../es6/Node');\nvar Node = Es6Node.extend(function(type, children) {\n Es6Node.call(this, type, children);\n return this;\n}).statics({\n CSXElement: 'CSXElement',\n CSXSelfClosingElement: 'CSXSelfClosingElement',\n CSXOpeningElement: 'CSXOpeningElement',\n CSXClosingElement: 'CSXClosingElement',\n CSXChild: 'CSXChild',\n CSXSpreadAttribute: 'CSXSpreadAttribute',\n CSXAttribute: 'CSXAttribute',\n CSXBindAttribute: 'CSXBindAttribute',\n CSXNamespacedName: 'CSXNamespacedName',\n CSXMemberExpression: 'CSXMemberExpression',\n CSXAttributes: 'CSXAttributes',\n CSXAttributeValue: 'CSXAttributeValue',\n CSXFragment: 'CSXFragment',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;\n","var Es6Parser = require('../es6/Parser');\nvar Node = require('./Node');\nvar Token = require('../../lexer/CSXToken');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/CSXLexer');\n\nvar Parser = Es6Parser.extend(function(lexer) {\n Es6Parser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n prmrexpr: function() {\n if(this.look.type() == Token.MARK) {\n var next = this.tokens[this.index];\n if(next && next.content() == '>') {\n return this.csxfragment();\n }\n return this.csxelem();\n }\n else {\n return Es6Parser.prototype.prmrexpr.call(this);\n }\n },\n csxfragment: function() {\n var node = new Node(Node.CSXFragment);\n node.add(\n this.match('<'),\n this.match('>')\n );\n while(this.look && this.look.content() != '</') {\n node.add(this.csxchild());\n }\n node.add(\n this.match('</'),\n this.match('>')\n );\n return node;\n },\n csxelem: function() {\n var node = new Node(Node.CSXOpeningElement);\n node.add(\n this.match(),\n this.csxelemname()\n );\n //id只有1个,member和namespace有多个\n var type = node.last().size() > 1 ? node.last().name() : null;\n var name;\n if(type) {\n name = [];\n node.last().leaves().forEach(function(leaf) {\n name.push(leaf.token().content());\n });\n }\n else {\n name = node.last().token().content();\n }\n while(this.look) {\n if(this.look.type() == Token.BIND_PROPERTY) {\n node.add(this.bindAttr());\n }\n else if(this.look.type() == Token.PROPERTY) {\n node.add(this.attr());\n }\n else if(this.look.content() == '{') {\n node.add(this.spreadattr());\n }\n else {\n break;\n }\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '/>') {\n node.add(this.match());\n node.name(Node.CSXSelfClosingElement);\n return node;\n }\n node.add(this.match('>'));\n var n = new Node(Node.CSXElement);\n n.add(node);\n while(this.look && this.look.content() != '</') {\n n.add(this.csxchild());\n }\n n.add(this.close(name, type));\n return n;\n },\n csxelemname: function(name, type) {\n if(name) {\n if(type) {\n var node = new Node(type);\n var self = this;\n name.forEach(function(na) {\n node.add(self.match(na));\n });\n return node;\n }\n else {\n return this.match(name);\n }\n }\n else {\n var node = new Node(Node.CSXMemberExpression);\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '.') {\n while(this.look && this.look.content() == '.') {\n node.add(\n this.match(),\n this.match(Token.ELEM)\n );\n }\n }\n else if(this.look.content() == ':') {\n while(this.look && this.look.content() == ':') {\n node.add(\n this.match(),\n this.match(Token.ELEM)\n );\n }\n }\n else {\n return node.first();\n }\n return node;\n }\n },\n csxmember: function(names) {\n var node = new Node(Node.CSXMemberExpression);\n names.forEach(function(name) {\n node.add(this.match(name));\n });\n return node;\n },\n bindAttr: function() {\n var node = new Node(Node.CSXBindAttribute);\n node.add(\n this.match(Token.BIND_PROPERTY),\n this.match('='),\n this.attrval()\n );\n return node;\n },\n attr: function() {\n var node = new Node(Node.CSXAttribute);\n node.add(\n this.attrname(),\n this.match('='),\n this.attrval()\n );\n return node;\n },\n spreadattr: function() {\n var node = new Node(Node.CSXSpreadAttribute);\n node.add(\n this.match(),\n this.match('...'),\n this.assignexpr(),\n this.match('}')\n );\n return node;\n },\n attrname: function() {\n var id = this.match(Token.PROPERTY);\n if(this.look && this.look.content() == ':') {\n var node = new Node(Node.CSXNamespacedName);\n node.add(id,\n this.match(),\n this.match(Token.PROPERTY)\n );\n return node;\n }\n return id;\n },\n attrval: function() {\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '{') {\n var node = new Node(Node.CSXAttributeValue);\n node.add(this.match());\n if(this.look && this.look.content() != '}') {\n node.add(this.assignexpr());\n }\n node.add(this.match('}'));\n return node;\n }\n else if(this.look.content() == '[') {\n var node = new Node(Node.CSXAttributeValue);\n node.add(this.match());\n while(this.look && this.look.content() != ']') {\n node.add(this.assignexpr());\n if(this.look && this.look.content() == ',') {\n node.add(this.match());\n }\n }\n node.add(this.match(']'));\n return node;\n }\n else if([Token.STRING, Token.NUMBER].indexOf(this.look.type()) > -1) {\n return this.match();\n }\n else if(this.look.content() == '<') {\n return this.csxfragment();\n }\n return this.csxelem();\n },\n csxchild: function() {\n switch(this.look.type()) {\n case Token.TEXT:\n return this.match();\n case Token.MARK:\n var next = this.tokens[this.index];\n if(next && next.content() == '>') {\n return this.csxfragment();\n }\n return this.csxelem();\n default:\n var node = new Node(Node.CSXChild);\n node.add(this.match('{'));\n if(this.look && this.look.content() != '}') {\n node.add(this.assignexpr());\n }\n node.add(this.match('}'));\n return node;\n }\n },\n close: function(name, type) {\n var node = new Node(Node.CSXClosingElement);\n node.add(\n this.match('</'),\n this.csxelemname(name, type),\n this.match('>')\n )\n return node;\n },\n match: function(type, line, msg) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //数组为其中一个即可\n else if(Array.isArray(type)) {\n if(this.look) {\n for(var i = 0, len = type.length; i < len; i++) {\n var t = type[i];\n if(typeof t == 'string' && this.look.content() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n else if(typeof t == 'number' && this.look.type() == t) {\n var l = this.look;\n this.move();\n return new Node(Node.TOKEN, l);\n }\n }\n }\n this.error('missing ' + type.join('|') + (msg || ''));\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && this.hasMoveLine)\n || this.look.content() == '}')\n ) {\n if(this.look && Es6Parser.S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n }\n}).statics({\n SELF_CLOSE: Lexer.SELF_CLOSE\n});\n\nmodule.exports = Parser;\n","var INode = require('../Node');\nvar Node = INode.extend(function(type, children) {\n INode.call(this, type, children);\n return this;\n}).statics({\n DOCUMENT: 'document',\n ELEMENT: 'element',\n SelfClosingElement: 'SelfClosingElement',\n OpeningElement: 'OpeningElement',\n ClosingElement: 'ClosingElement',\n Attribute: 'Attribute',\n getKey: function(s) {\n if(!s) {\n throw new Error('empty value');\n }\n if(!keys) {\n var self = this;\n keys = {};\n Object.keys(this).forEach(function(k) {\n var v = self[k];\n keys[v] = k;\n });\n }\n return keys[s];\n }\n});\nvar keys;\nmodule.exports = Node;","var IParser = require('../Parser');\nvar character = require('../../util/character');\nvar Lexer = require('../../lexer/AxmlLexer');\nvar Rule = require('../../lexer/rule/AxmlRule');\nvar Token = require('../../lexer/AxmlToken');\nvar Node = require('./Node');\nvar S = {};\nS[Token.BLANK] = S[Token.TAB] = S[Token.COMMENT] = S[Token.LINE] = S[Token.ENTER] = true;\nvar SINGLE = {\n 'img': true,\n 'meta': true,\n 'link': true,\n '!doctype': true,\n 'br': true,\n 'basefont': true,\n 'base': true,\n 'col': true,\n 'embed': true,\n 'frame': true,\n 'hr': true,\n 'input': true,\n 'keygen': true,\n 'area': true,\n 'param': true,\n 'source': true,\n 'track': true\n};\n\nvar Parser = IParser.extend(function(lexer) {\n IParser.call(this, lexer);\n this.init(lexer);\n return this;\n}).methods({\n parse: function(code) {\n this.lexer.parse(code);\n this.tree = this.document();\n return this.tree;\n },\n init: function(lexer) {\n this.look = null;\n this.tokens = null;\n this.lastLine = 1;\n this.lastCol = 1;\n this.line = 1;\n this.col = 1;\n this.index = 0;\n this.length = 0;\n this.ignores = {};\n this.hasMoveLine = false;\n this.tree = {};\n if(lexer) {\n this.lexer = lexer;\n }\n else if(this.lexer) {\n this.lexer.init();\n }\n else {\n this.lexer = new Lexer(new Rule());\n }\n },\n document: function() {\n this.tokens = this.lexer.tokens();\n this.length = this.tokens.length;\n if(this.tokens.length) {\n this.move();\n }\n var node = new Node(Node.DOCUMENT);\n var first = true;\n while(this.look) {\n node.add(this.element(first));\n first = false;\n }\n return node;\n },\n element: function(first) {\n if(this.look.type() == Token.TEXT) {\n return this.match();\n }\n else {\n var node = new Node(Node.OpeningElement);\n node.add(\n this.match('<'),\n this.elemname(first)\n );\n var name = node.last().token().content();\n while(this.look && this.look.type() == Token.PROPERTY) {\n node.add(this.attr());\n }\n if(!this.look) {\n this.error();\n }\n if(this.look.content() == '/>') {\n node.add(this.match());\n node.name(Node.SelfClosingElement);\n return node;\n }\n node.add(this.match('>'));\n if(SINGLE.hasOwnProperty(name.toLowerCase())) {\n node.name(Node.SelfClosingElement);\n return node;\n }\n var n = new Node(Node.ELEMENT);\n n.add(node);\n while(this.look && this.look.content() != '</') {\n n.add(this.element());\n }\n n.add(this.close(name));\n return n;\n }\n },\n elemname: function(first) {\n if(!this.look) {\n this.error();\n }\n if(first && this.look.type() == Token.DOC) {\n return this.match();\n }\n return this.match(Token.ELEM);\n },\n attr: function() {\n var node = new Node(Node.Attribute);\n node.add(this.match(Token.PROPERTY));\n if(this.look && this.look.content() == '=') {\n node.add(this.match());\n if(!this.look) {\n this.error();\n }\n switch(this.look.type()) {\n case Token.STRING:\n case Token.NUMBER:\n case Token.PROPERTY:\n node.add(this.match());\n break;\n default:\n this.error();\n }\n }\n return node;\n },\n close: function(name) {\n var node = new Node(Node.ClosingElement);\n node.add(\n this.match('</'),\n this.match(name),\n this.match('>')\n );\n return node;\n },\n match: function(type, line, msg) {\n if(typeof type == 'boolean') {\n msg = line;\n line = type;\n type = undefined;\n }\n if(typeof line != 'boolean') {\n line = false;\n msg = line;\n }\n //未定义为所有非空白token\n if(character.isUndefined(type)) {\n if(this.look) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('syntax error' + (msg || ''));\n }\n }\n //或者根据token的type或者content匹配\n else if(typeof type == 'string') {\n //特殊处理;,不匹配但有换行或者末尾时自动补全,还有受限行\n if(type == ';'\n && (!this.look\n || (this.look.content() != type && this.hasMoveLine)\n || this.look.content() == '}')\n ) {\n if(this.look && S[this.look.type()]) {\n this.move();\n }\n return this.virtual(';');\n }\n else if(this.look && this.look.content() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + type + (msg || ''));\n }\n }\n else if(typeof type == 'number') {\n if(this.look && this.look.type() == type) {\n var l = this.look;\n this.move(line);\n return new Node(Node.TOKEN, l);\n }\n else {\n this.error('missing ' + Token.type(type) + (msg || ''));\n }\n }\n },\n move: function(line) {\n this.lastLine = this.line;\n this.lastCol = this.col;\n //遗留下来的换行符\n this.hasMoveLine = false;\n do {\n this.look = this.tokens[this.index++];\n if(!this.look) {\n return;\n }\n //存下忽略的token\n if(S[this.look.type()]) {\n this.ignores[this.index - 1] = this.look;\n }\n //包括line的情况下要跳出\n if(this.look.type() == Token.LINE) {\n this.line++;\n this.col = 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n else if(this.look.type() == Token.COMMENT) {\n var s = this.look.content();\n var n = character.count(this.look.content(), character.LINE);\n if(n > 0) {\n this.line += n;\n var i = s.lastIndexOf(character.LINE);\n this.col += s.length - i - 1;\n this.hasMoveLine = true;\n if(line) {\n break;\n }\n }\n }\n else {\n this.col += this.look.content().length;\n if(!S[this.look.type()]) {\n break;\n }\n }\n } while(this.index <= this.length);\n },\n error: function(msg) {\n msg = 'SyntaxError: ' + (msg || ' syntax error');\n throw new Error(msg + ' line ' + this.lastLine + ' col ' + this.lastCol);\n }\n});\nmodule.exports = Parser;\n","var Class = require('../../util/Class');\nvar JsNode = require('./Node');\nvar Token = require('../../lexer/Token');\nvar Parser = require('./Parser');\nvar id = 0;\nvar Context = Class(function(parent, name) {\n this.id = id++;\n this.parser = new Parser();\n this.parent = parent || null; //父上下文,如果是全局则为空\n this.name = name || null; //上下文名称,即函数名,函数表达式为空,全局也为空\n this.children = []; //函数声明或函数表达式所产生的上下文\n this.childrenMap = Object.create(null); //键是函数名,值是上下文,匿名函数表达式键为cid\n this.vars = []; //变量var声明\n this.varsMap = Object.create(null); //键为id字面量,值是它的token的节点\n this.vardeclMap = Object.create(null); //var赋值记录,优先级vardecl > fndecl > varnodecl\n this.params = []; //形参,函数上下文才有,即全局无\n this.paramsMap = Object.create(null); //键为id字面量,值是它的token的节点\n this.aParams = []; //实参,函数表达式才有\n this.vids = []; //上下文环境里用到的变量id\n this.vidsMap = Object.create(null); //键为id字面量,值是它的token的节点\n this.returns = []; //上下文环境里return语句\n this.node = null; //对应的ast的节点\n this.thisIs = null; //this指向,仅函数表达式call或apply执行时有用\n if(!this.isTop()) {\n this.parent.addChild(this);\n }\n}).methods({\n parse: function(code) {\n var ast;\n if(code instanceof JsNode) {\n ast = code;\n }\n else {\n ast = this.parser.parse(code);\n }\n recursion(ast, this);\n return this;\n },\n getId: function() {\n return this.id;\n },\n getName: function() {\n return this.name;\n },\n getParent: function() {\n return this.parent;\n },\n isTop: function() {\n return !this.parent;\n },\n isFnexpr: function() {\n return !this.isTop() && !this.name;\n },\n hasParam: function(p) {\n return p in this.paramsMap;\n },\n getParams: function() {\n return this.params;\n },\n addParam: function(p) {\n //形参不可能重复,无需判断\n this.paramsMap[p] = this.params.length;\n this.params.push(p);\n return this;\n },\n getAParams: function() {\n return this.aParams;\n },\n addAParam: function(ap) {\n this.aParams.push(ap);\n return this;\n },\n getChild: function(name) {\n return this.childrenMap[name];\n },\n getChildren: function() {\n return this.children;\n },\n //通过name查找函数声明,id查找表达式\n hasChild: function(name) {\n return name in this.childrenMap;\n },\n addChild: function(child) {\n var name = child.getName();\n //函数表达式名字为空用id删除\n if(name) {\n if(name in this.vardeclMap) {\n return this;\n }\n this.delVar(name);\n this.delChild(name);\n }\n else {\n this.delChild(child.getId());\n }\n name = name || child.getId();\n this.childrenMap[name] = child;\n this.children.push(child);\n return this;\n },\n //name函数声明,id表达式\n delChild: function(name) {\n if(this.hasChild(name)) {\n var i = this.children.indexOf(this.childrenMap[name]);\n this.children.splice(i, 1);\n delete this.childrenMap[name];\n }\n return this;\n },\n hasVar: function(v) {\n return v in this.varsMap;\n },\n addVar: function(node, assign) {\n var v = node.leaves()[0].token().content();\n //赋值拥有最高优先级,会覆盖掉之前的函数声明和var\n if(assign) {\n this.delVar(v);\n this.delChild(v);\n this.vardeclMap[v] = true;\n }\n //仅仅是var声明无赋值,且已有过声明或函数,忽略之\n else if(this.hasVar(v) || this.hasChild(v)) {\n return this;\n }\n this.varsMap[v] = node;\n this.vars.push(node);\n return this;\n },\n delVar: function(v) {\n if(this.hasVar(v)) {\n var i = this.vars.indexOf(this.varsMap[v]);\n this.vars.splice(i, 1);\n delete this.varsMap[v];\n }\n return this;\n },\n getVars: function() {\n return this.vars;\n },\n addReturn: function(node) {\n this.returns.push(node);\n return this;\n },\n getReturns: function() {\n return this.returns;\n },\n hasVid: function(v) {\n return v in this.vidsMap;\n },\n getVid: function(v) {\n return this.vidsMap[v];\n },\n addVid: function(node) {\n var v = node.token().content();\n this.vids.push(node);\n this.vidsMap[v] = this.vidsMap[v] || [];\n this.vidsMap[v].push(node);\n return this;\n },\n getVids: function() {\n return this.vids;\n },\n getNode: function() {\n return this.node;\n },\n setNode: function(n) {\n this.node = n;\n return this;\n },\n setThis: function(t) {\n this.thisIs = t;\n return this;\n },\n getThis: function() {\n return this.thisIs;\n }\n});\n\nfunction recursion(node, context) {\n var isToken = node.name() == JsNode.TOKEN;\n var isVirtual = isToken && node.token().type() == Token.VIRTUAL;\n if(isToken) {\n if(!isVirtual) {\n var token = node.token();\n var s = token.content();\n if(s == 'return') {\n context.addReturn(node);\n }\n }\n }\n else {\n if(node.name() == JsNode.VARDECL) {\n vardecl(node, context);\n }\n else if(node.name() == JsNode.FNDECL) {\n context = fndecl(node, context);\n }\n else if(node.name() == JsNode.FNEXPR) {\n context = fnexpr(node, context);\n }\n else if(node.name() == JsNode.PRMREXPR) {\n prmrexpr(node, context);\n }\n node.leaves().forEach(function(leaf, i) {\n recursion(leaf, context);\n });\n }\n}\nfunction vardecl(node, context) {\n var leaves = node.leaves();\n var assign = !!leaves[1];\n context.addVar(node, assign);\n}\nfunction fndecl(node, context) {\n var v = node.leaves()[1].leaves().content();\n var child = new Context(context, v);\n child.setNode(node);\n var params = node.leaves()[3];\n if(params.name() == JsNode.FNPARAMS) {\n addParam(params, child);\n }\n return child;\n}\nfunction fnexpr(node, context) {\n //函数表达式name为空\n var child = new Context(context);\n child.setNode(node);\n //记录形参\n var params;\n var v = node.leaves()[1];\n if(v.token().content() != '(') {\n params = node.leaves()[3];\n }\n else {\n params = node.leaves()[2];\n }\n if(params.name() == JsNode.FNPARAMS) {\n addParam(params, child);\n }\n //匿名函数检查实参传入情况,包括call和apply设置this\n var next = node.next();\n //!function(){}()形式\n if(next && next.name() == JsNode.ARGS) {\n var leaves = next.leaves();\n //长度2为()空参数,长度3有参数,第2个节点\n if(leaves.length == 3) {\n addAParam(leaves[1], child);\n }\n }\n //call或applay\n else if(next\n && next.name() == JsNode.TOKEN\n && next.token().content() == '.'\n && next.next()\n && next.next().name() == JsNode.TOKEN\n && ['call', 'apply'].indexOf(next.next().token().content()) > -1) {\n var mmb = node.parent();\n if(mmb.name() == JsNode.MMBEXPR) {\n var callexpr = mmb.parent();\n if(callexpr.name() == JsNode.CALLEXPR) {\n var isApply = next.next().token().content() == 'apply';\n next = mmb.next();\n if(next && next.name() == JsNode.ARGS) {\n var leaves = next.leaves();\n //长度2为()空参数,长度3有参数,第2个节点\n if(leaves.length == 3) {\n isApply ? addApplyAParam(leaves[1], child) : addCallAParam(leaves[1], child);\n }\n }\n }\n }\n }\n //(function(){})()形式\n else {\n var prmr = node.parent();\n var prev = node.prev();\n if(prmr.name() == JsNode.PRMREXPR\n && prev\n && prev.name() == JsNode.TOKEN\n && prev.token().content() == '(') {\n next = prmr.next();\n if(next && next.name() == JsNode.ARGS) {\n var leaves = next.leaves();\n //长度2为()空参数,长度3有参数,第2个节点\n if(leaves.length == 3) {\n addAParam(leaves[1], child);\n }\n }\n //(function(){}).call()形式\n else if(next\n && next.name() == JsNode.TOKEN\n && next.token().content() == '.'\n && next.next()\n && next.next().name() == JsNode.TOKEN\n && ['call', 'apply'].indexOf(next.next().token().content()) > -1) {\n var mmb = prmr.parent();\n if(mmb.name() == JsNode.MMBEXPR) {\n var callexpr = mmb.parent();\n if(callexpr.name() == JsNode.CALLEXPR) {\n var isApply = next.next().token().content() == 'apply';\n next = mmb.next();\n if(next && next.name() == JsNode.ARGS) {\n var leaves = next.leaves();\n //长度2为()空参数,长度3有参数,第2个节点\n if(leaves.length == 3) {\n isApply ? addApplyAParam(leaves[1], child) : addCallAParam(leaves[1], child);\n }\n else {\n child.setThis(undefined);\n }\n }\n }\n }\n }\n }\n }\n return child;\n}\n\nfunction addParam(params, child) {\n params.leaves().forEach(function(leaf, i) {\n if(leaf.name() == JsNode.TOKEN && leaf.token().content() != ',') {\n child.addParam(leaf.token().content());\n }\n });\n}\nfunction addAParam(params, child) {\n params.leaves().forEach(function(leaf, i) {\n if(i % 2 == 0) {\n child.addAParam(leaf);\n }\n });\n}\nfunction addCallAParam(params, child) {\n params.leaves().forEach(function(leaf, i) {\n if(i == 0) {\n child.setThis(leaf);\n }\n else if(i % 2 == 1) {\n child.addAParam(leaf);\n }\n });\n}\nfunction addApplyAParam(params, child) {\n child.setThis(params.leaves()[0]);\n if(params.leaves()[2]) {\n params.leaves()[2].leaves()[0].leaves().forEach(function(leaf, i) {\n if(i % 2 == 1) {\n child.addAParam(leaf);\n }\n });\n }\n}\nfunction prmrexpr(node, context) {\n var first = node.leaves()[0];\n if(first.name() == JsNode.TOKEN) {\n var token = first.token();\n if(token.type() == Token.ID || token.content() == 'this') {\n context.addVid(first);\n }\n }\n}\n\nmodule.exports = Context;","var Lexer = require('./lexer/Lexer');\nvar Rule = require('./lexer/rule/Rule');\nvar CssLexer = require('./lexer/CssLexer');\nvar HtmlLexer = require('./lexer/HtmlLexer');\nvar EcmascriptLexer = require('./lexer/EcmascriptLexer');\nvar JSXLexer = require('./lexer/JSXLexer');\nvar CSXLexer = require('./lexer/CSXLexer');\nvar AxmlLexer = require('./lexer/AxmlLexer');\n\nvar EcmascriptRule = require('./lexer/rule/EcmascriptRule');\nvar CssRule = require('./lexer/rule/CssRule');\nvar JavaRule = require('./lexer/rule/JavaRule');\nvar CRule = require('./lexer/rule/CRule');\nvar HtmlRule = require('./lexer/rule/HtmlRule');\nvar AxmlRule = require('./lexer/rule/AxmlRule');\n\nvar Token = require('./lexer/Token');\nvar CssToken = require('./lexer/CssToken');\nvar HtmlToken = require('./lexer/HtmlToken');\nvar JSXToken = require('./lexer/JSXToken');\nvar CSXToken = require('./lexer/CSXToken');\nvar AxmlToken = require('./lexer/AxmlToken');\n\nvar JsParser = require('./parser/js/Parser');\nvar Es6Parser = require('./parser/es6/Parser');\nvar CssParser = require('./parser/css/Parser');\nvar HtmlParser = require('./parser/html/Parser');\nvar JSXParser = require('./parser/jsx/Parser');\nvar CSXParser = require('./parser/csx/Parser');\nvar AxmlParser = require('./parser/axml/Parser');\n\nvar JsNode = require('./parser/js/Node');\nvar Es6Node = require('./parser/es6/Node');\nvar CssNode = require('./parser/css/Node');\nvar HtmlNode = require('./parser/html/Node');\nvar JSXNode = require('./parser/jsx/Node');\nvar CSXNode = require('./parser/csx/Node');\nvar AxmlNode = require('./parser/axml/Node');\n\nvar JsContext = require('./parser/js/Context');\n\nvar walk = require('./util/walk');\n\nexports.getClass = function (type, lan) {\n type = (type || '').toLowerCase();\n lan = (lan || '').toLowerCase();\n switch (type) {\n case 'lexer':\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es9':\n case 'es2015':\n case 'es2016':\n case 'es2017':\n case 'es2018':\n case 'ecmascript':\n case 'as':\n case 'actionscript':\n return EcmascriptLexer;\n case 'css':\n return CssLexer;\n case 'html':\n case 'htm':\n return HtmlLexer;\n case 'axml':\n return AxmlLexer;\n case 'jsx':\n return JSXLexer;\n case 'csx':\n return CSXLexer;\n default:\n return Lexer;\n }\n break;\n case 'parser':\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n return JsParser;\n case 'es6':\n case 'es7':\n case 'es2015':\n case 'es2016':\n return Es6Parser;\n case 'css':\n return CssParser;\n case 'html':\n case 'htm':\n return HtmlParser;\n case 'axml':\n return AxmlParser;\n case 'jsx':\n return JSXParser;\n case 'csx':\n return CSXParser;\n default:\n throw new Error('Unsupport Language Parser: ' + lan);\n }\n break;\n case 'node':\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n return JsNode;\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n return Es6Node;\n case 'css':\n return CssNode;\n case 'html':\n case 'htm':\n return HtmlNode;\n case 'axml':\n return AxmlNode;\n case 'jsx':\n return JSXNode;\n case 'csx':\n return CSXNode;\n default:\n throw new Error('Unsupport Language Node: ' + lan);\n }\n break;\n case 'context':\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n return JsContext;\n default:\n throw new Error('Unsupport Language Context: ' + lan);\n }\n break;\n case 'token':\n switch (lan) {\n case 'css':\n return CssToken;\n case 'htm':\n case 'html':\n return HtmlToken;\n case 'axml':\n return AxmlToken;\n case 'jsx':\n return JSXToken;\n case 'csx':\n return CSXToken;\n default:\n return Token;\n }\n case 'rule':\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n case 'ecmascript':\n return EcmascriptRule;\n case 'css':\n return CssRule;\n case 'htm':\n case 'html':\n return HtmlRule;\n case 'axml':\n return AxmlRule;\n case 'jsx':\n return EcmascriptRule;\n case 'csx':\n return EcmascriptRule;\n case 'java':\n return JavaRule;\n default:\n return Rule;\n }\n case 'walk':\n return walk;\n default:\n throw new Error('Unsupport Class Type: ' + type);\n }\n};\n\nexports.getLexer = function (lan) {\n lan = lan.toLowerCase();\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n case 'as':\n case 'actionscript':\n return new EcmascriptLexer(new EcmascriptRule());\n case 'css':\n return new CssLexer(new CssRule());\n case \"java\":\n return new Lexer(new JavaRule());\n case \"c\":\n case \"c++\":\n case \"cpp\":\n case \"cplusplus\":\n return new Lexer(new CRule());\n case 'html':\n case 'htm':\n return new HtmlLexer(new HtmlRule());\n case 'axml':\n return new AxmlLexer(new AxmlRule());\n case 'jsx':\n return new JSXLexer(new EcmascriptRule());\n case 'csx':\n return new CSXLexer(new EcmascriptRule());\n default:\n throw new Error('Unsupport Language Lexer: ' + lan);\n }\n};\n\nexports.getParser = function (lan) {\n lan = lan.toLowerCase();\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n return new JsParser(exports.getLexer(lan));\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n return new Es6Parser(exports.getLexer(lan));\n case 'css':\n return new CssParser(exports.getLexer(lan));\n case 'html':\n case 'htm':\n return new HtmlParser(exports.getLexer(lan));\n case 'axml':\n return new AxmlParser(exports.getLexer(lan));\n case 'jsx':\n return new JSXParser(exports.getLexer(lan));\n case 'csx':\n return new CSXParser(exports.getLexer(lan));\n default:\n throw new Error('Unsupport Language Parser: ' + lan);\n }\n};\n\nexports.getContext = function (lan) {\n lan = lan.toLowerCase();\n switch (lan) {\n case 'js':\n case 'javascript':\n case 'es':\n case 'es5':\n case 'ecmascript':\n case 'es6':\n case 'es7':\n case 'es8':\n case 'es2015':\n case 'es2016':\n return new JsContext();\n default:\n throw new Error('Unsupport Language Context: ' + lan);\n }\n};\n\nexports.reset = function() {\n Token.reset();\n};\n"],"names":["Token","Lexer","RegMatch","Rule","CompleteEqual","LineSearch","LineParse","CharacterSet","EcmascriptRule","ELEM","JSXToken","EcmascriptLexer","CSXToken","SELF_CLOSE","Node","INode","S","Parser","IParser","keys","NOASSIGN","Es6Node","Es6Parser","SINGLE","JsNode","CssLexer","HtmlLexer","AxmlLexer","JSXLexer","CSXLexer","JsParser","CssParser","HtmlParser","AxmlParser","JSXParser","CSXParser","CssNode","HtmlNode","AxmlNode","JSXNode","CSXNode","JsContext","CssToken","HtmlToken","AxmlToken","CssRule","HtmlRule","AxmlRule","JavaRule","CRule"],"mappings":"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"}