Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Lexer.php

function Lexer::generateRegexp

1 call to Lexer::generateRegexp()
Lexer::tokenize in vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php
*

File

vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php, line 137

Class

Lexer
Implementation based on Nette Tokenizer (New BSD License; https://github.com/nette/tokenizer)

Namespace

PHPStan\PhpDocParser\Lexer

Code

private function generateRegexp() : string {
    $patterns = [
        self::TOKEN_HORIZONTAL_WS => '[\\x09\\x20]++',
        self::TOKEN_IDENTIFIER => '(?:[\\\\]?+[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF-]*+)++',
        self::TOKEN_THIS_VARIABLE => '\\$this(?![0-9a-z_\\x80-\\xFF])',
        self::TOKEN_VARIABLE => '\\$[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF]*+',
        // '&' followed by TOKEN_VARIADIC, TOKEN_VARIABLE, TOKEN_EQUAL, TOKEN_EQUAL or TOKEN_CLOSE_PARENTHESES
self::TOKEN_REFERENCE => '&(?=\\s*+(?:[.,=)]|(?:\\$(?!this(?![0-9a-z_\\x80-\\xFF])))))',
        self::TOKEN_UNION => '\\|',
        self::TOKEN_INTERSECTION => '&',
        self::TOKEN_NULLABLE => '\\?',
        self::TOKEN_NEGATED => '!',
        self::TOKEN_OPEN_PARENTHESES => '\\(',
        self::TOKEN_CLOSE_PARENTHESES => '\\)',
        self::TOKEN_OPEN_ANGLE_BRACKET => '<',
        self::TOKEN_CLOSE_ANGLE_BRACKET => '>',
        self::TOKEN_OPEN_SQUARE_BRACKET => '\\[',
        self::TOKEN_CLOSE_SQUARE_BRACKET => '\\]',
        self::TOKEN_OPEN_CURLY_BRACKET => '\\{',
        self::TOKEN_CLOSE_CURLY_BRACKET => '\\}',
        self::TOKEN_COMMA => ',',
        self::TOKEN_VARIADIC => '\\.\\.\\.',
        self::TOKEN_DOUBLE_COLON => '::',
        self::TOKEN_DOUBLE_ARROW => '=>',
        self::TOKEN_ARROW => '->',
        self::TOKEN_EQUAL => '=',
        self::TOKEN_COLON => ':',
        self::TOKEN_OPEN_PHPDOC => '/\\*\\*(?=\\s)\\x20?+',
        self::TOKEN_CLOSE_PHPDOC => '\\*/',
        self::TOKEN_PHPDOC_TAG => '@(?:[a-z][a-z0-9-\\\\]+:)?[a-z][a-z0-9-\\\\]*+',
        self::TOKEN_PHPDOC_EOL => '\\r?+\\n[\\x09\\x20]*+(?:\\*(?!/)\\x20?+)?',
        self::TOKEN_FLOAT => '[+\\-]?(?:(?:[0-9]++(_[0-9]++)*\\.[0-9]*+(_[0-9]++)*(?:e[+\\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]*+(_[0-9]++)*\\.[0-9]++(_[0-9]++)*(?:e[+\\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]++(_[0-9]++)*e[+\\-]?[0-9]++(_[0-9]++)*))',
        self::TOKEN_INTEGER => '[+\\-]?(?:(?:0b[0-1]++(_[0-1]++)*)|(?:0o[0-7]++(_[0-7]++)*)|(?:0x[0-9a-f]++(_[0-9a-f]++)*)|(?:[0-9]++(_[0-9]++)*))',
        self::TOKEN_SINGLE_QUOTED_STRING => '\'(?:\\\\[^\\r\\n]|[^\'\\r\\n\\\\])*+\'',
        self::TOKEN_DOUBLE_QUOTED_STRING => '"(?:\\\\[^\\r\\n]|[^"\\r\\n\\\\])*+"',
        self::TOKEN_WILDCARD => '\\*',
    ];
    if ($this->parseDoctrineAnnotations) {
        $patterns[self::TOKEN_DOCTRINE_TAG] = '@[a-z_\\\\][a-z0-9_\\:\\\\]*[a-z_][a-z0-9_]*';
        $patterns[self::TOKEN_DOCTRINE_ANNOTATION_STRING] = '"(?:""|[^"])*+"';
    }
    // anything but TOKEN_CLOSE_PHPDOC or TOKEN_HORIZONTAL_WS or TOKEN_EOL
    $patterns[self::TOKEN_OTHER] = '(?:(?!\\*/)[^\\s])++';
    foreach ($patterns as $type => &$pattern) {
        $pattern = '(?:' . $pattern . ')(*MARK:' . $type . ')';
    }
    return '~' . implode('|', $patterns) . '~Asi';
}
RSS feed
Powered by Drupal