Пример #1
0
 /**
  * value: NUMBER | STRING | SYMBOL | '(' expr ')'
  */
 private static function parseValue(Scanner $scanner)
 {
     switch ($scanner->tokenType()) {
         case T_CONSTANT_ENCAPSED_STRING:
         case T_DNUMBER:
         case T_LNUMBER:
             $result = new ConstantExpression($scanner->tokenValue());
             break;
         case T_STRING:
             $result = new SymbolExpression($scanner->tokenValue());
             break;
         case '(':
             $scanner->nextToken();
             $result = self::parseExpr($scanner);
             if ($scanner->tokenType() !== ')') {
                 throw new TemplateParserException('missing ")"', $scanner);
             }
             break;
         default:
             throw new TemplateParserException('syntax error', $scanner);
     }
     $scanner->nextToken();
     return $result;
 }