/** * 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; }