/** * get next token * @see Fl_Token::getNextToken() */ public function getNextToken() { $token = parent::getNextToken(); if ($token || $token === false) { return $token; } //获取特殊Token $token = $this->getSpecialToken(); if ($token) { return $token; } $char = $this->text[$this->pos]; //字符串 $result = $this->getQuoteText($char, true, true); if ($result) { $this->pendingNextChar = false; return $this->getTokenInfo(FL_TOKEN_JS_STRING, $result); } //数值 if (Fl_Js_Static::isDigit($char) || $char === '.' && preg_match("/\\d/", $this->text[$this->pos + 1])) { $result = $this->getNumberToken($char); return $this->getTokenInfo(FL_TOKEN_JS_NUMBER, $result); } //符号 if (Fl_Js_Static::isPuncChar($char) || $char === '.') { $this->getNextChar(); if (isset($this->validateData[$char])) { $this->validateData[$char]++; } return $this->getTokenInfo(FL_TOKEN_JS_PUNC, $char); } if ($char === '/' && $this->regexpAllowed) { $result = $this->getRegexpToken($char); return $this->getTokenInfo(FL_TOKEN_JS_REGEXP, $result); } //操作符号 if (Fl_Js_Static::isOperatorChar($char) || $char === '/') { $result = $this->getOperatorToken($char); return $this->getTokenInfo(FL_TOKEN_JS_OPERATOR, $result); } //单词 if (Fl_Js_Static::isIdentifierStart($char)) { $result = $this->readWhile('getWordToken'); $type = FL_TOKEN_JS_NAME; if (Fl_Js_Static::isKeywordAtom($result)) { $type = FL_TOKEN_JS_ATOM; } else { if (Fl_Js_Static::isOperator($result)) { $type = FL_TOKEN_JS_OPERATOR; } else { if (Fl_Js_Static::isKeyword($result)) { $type = FL_TOKEN_JS_KEYWORD; } } } return $this->getTokenInfo($type, $result); } $this->throwException('Unexpected character ' . $char); }