class DocLexer
Simple lexer for docblock annotations.
@template-extends AbstractLexer<DocLexer::T_*, string>
Hierarchy
- class \Drupal\Component\Annotation\Doctrine\DocLexer extends \Doctrine\Common\Lexer\AbstractLexer
Expanded class hierarchy of DocLexer
File
-
core/
lib/ Drupal/ Component/ Annotation/ Doctrine/ DocLexer.php, line 44
Namespace
Drupal\Component\Annotation\DoctrineView source
final class DocLexer extends AbstractLexer {
public const T_NONE = 1;
public const T_INTEGER = 2;
public const T_STRING = 3;
public const T_FLOAT = 4;
// All tokens that are also identifiers should be >= 100
public const T_IDENTIFIER = 100;
public const T_AT = 101;
public const T_CLOSE_CURLY_BRACES = 102;
public const T_CLOSE_PARENTHESIS = 103;
public const T_COMMA = 104;
public const T_EQUALS = 105;
public const T_FALSE = 106;
public const T_NAMESPACE_SEPARATOR = 107;
public const T_OPEN_CURLY_BRACES = 108;
public const T_OPEN_PARENTHESIS = 109;
public const T_TRUE = 110;
public const T_NULL = 111;
public const T_COLON = 112;
public const T_MINUS = 113;
/** @var array<string, self::T*> */
protected $noCase = [
'@' => self::T_AT,
',' => self::T_COMMA,
'(' => self::T_OPEN_PARENTHESIS,
')' => self::T_CLOSE_PARENTHESIS,
'{' => self::T_OPEN_CURLY_BRACES,
'}' => self::T_CLOSE_CURLY_BRACES,
'=' => self::T_EQUALS,
':' => self::T_COLON,
'-' => self::T_MINUS,
'\\' => self::T_NAMESPACE_SEPARATOR,
];
/** @var array<string, self::T*> */
protected $withCase = [
'true' => self::T_TRUE,
'false' => self::T_FALSE,
'null' => self::T_NULL,
];
/**
* Whether the next token starts immediately, or if there were
* non-captured symbols before that
*/
public function nextTokenIsAdjacent() : bool {
return $this->token === null || $this->lookahead !== null && $this->lookahead->position - $this->token->position === strlen($this->token->value);
}
/**
* {@inheritDoc}
*/
protected function getCatchablePatterns() : array {
return [
'[a-z_\\\\][a-z0-9_\\:\\\\]*[a-z_][a-z0-9_]*',
'(?:[+-]?[0-9]+(?:[\\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?',
'"(?:""|[^"])*+"',
];
}
/**
* {@inheritDoc}
*/
protected function getNonCatchablePatterns() : array {
return [
'\\s+',
'\\*+',
'(.)',
];
}
/**
* {@inheritDoc}
*/
protected function getType(&$value) : int {
$type = self::T_NONE;
if ($value[0] === '"') {
$value = str_replace('""', '"', substr($value, 1, strlen($value) - 2));
return self::T_STRING;
}
if (isset($this->noCase[$value])) {
return $this->noCase[$value];
}
if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) {
return self::T_IDENTIFIER;
}
$lowerValue = strtolower($value);
if (isset($this->withCase[$lowerValue])) {
return $this->withCase[$lowerValue];
}
// Checking numeric value
if (is_numeric($value)) {
return strpos($value, '.') !== false || stripos($value, 'e') !== false ? self::T_FLOAT : self::T_INTEGER;
}
return $type;
}
}
Members
| Title Sort descending | Modifiers | Object type | Summary |
|---|---|---|---|
| DocLexer::$noCase | protected | property | @var array<string, self::T*> |
| DocLexer::$withCase | protected | property | @var array<string, self::T*> |
| DocLexer::getCatchablePatterns | protected | function | |
| DocLexer::getNonCatchablePatterns | protected | function | |
| DocLexer::getType | protected | function | |
| DocLexer::nextTokenIsAdjacent | public | function | Whether the next token starts immediately, or if there were non-captured symbols before that |
| DocLexer::T_AT | public | constant | |
| DocLexer::T_CLOSE_CURLY_BRACES | public | constant | |
| DocLexer::T_CLOSE_PARENTHESIS | public | constant | |
| DocLexer::T_COLON | public | constant | |
| DocLexer::T_COMMA | public | constant | |
| DocLexer::T_EQUALS | public | constant | |
| DocLexer::T_FALSE | public | constant | |
| DocLexer::T_FLOAT | public | constant | |
| DocLexer::T_IDENTIFIER | public | constant | |
| DocLexer::T_INTEGER | public | constant | |
| DocLexer::T_MINUS | public | constant | |
| DocLexer::T_NAMESPACE_SEPARATOR | public | constant | |
| DocLexer::T_NONE | public | constant | |
| DocLexer::T_NULL | public | constant | |
| DocLexer::T_OPEN_CURLY_BRACES | public | constant | |
| DocLexer::T_OPEN_PARENTHESIS | public | constant | |
| DocLexer::T_STRING | public | constant | |
| DocLexer::T_TRUE | public | constant |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.