Пример #1
0
 /**
  * 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);
 }