Skip to content

Commit c352202

Browse files
committed
Added support for JEP 12
1 parent ccf063c commit c352202

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

src/Lexer.php

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,34 @@ class Lexer
99
private $regex, $offsetToToken;
1010

1111
private $tokens = [
12-
'[a-zA-Z_][a-zA-Z_0-9]*' => 'identifier',
13-
'\.' => 'dot',
14-
'\*' => 'star',
15-
'\[\]' => 'flatten',
16-
'-?\d+' => 'number',
17-
'\|\|' => 'or',
18-
'\|' => 'pipe',
19-
'\[\?' => 'filter',
20-
'\[' => 'lbracket',
21-
'\]' => 'rbracket',
22-
'"(?:\\\\\\\\|\\\\"|[^"])*"' => 'quoted_identifier',
23-
'`(?:\\\\\\\\|\\\\`|[^`])*`' => 'literal',
24-
',' => 'comma',
25-
':' => 'colon',
26-
'@' => 'current',
27-
'&' => 'expref',
28-
'\(' => 'lparen',
29-
'\)' => 'rparen',
30-
'\{' => 'lbrace',
31-
'\}' => 'rbrace',
32-
'!=' => 'comparator',
33-
'==' => 'comparator',
34-
'<=' => 'comparator',
35-
'>=' => 'comparator',
36-
'<' => 'comparator',
37-
'>' => 'comparator',
38-
'[ \t]' => 'skip',
12+
'[a-zA-Z_][a-zA-Z_0-9]*' => 'identifier',
13+
'\.' => 'dot',
14+
'\*' => 'star',
15+
'\[\]' => 'flatten',
16+
'-?\d+' => 'number',
17+
'\|\|' => 'or',
18+
'\|' => 'pipe',
19+
'\[\?' => 'filter',
20+
'\[' => 'lbracket',
21+
'\]' => 'rbracket',
22+
'\'(?:\\\\\\\\|\\\\\'|[^\'])*\'' => 'raw_string',
23+
'"(?:\\\\\\\\|\\\\"|[^"])*"' => 'quoted_identifier',
24+
'`(?:\\\\\\\\|\\\\`|[^`])*`' => 'literal',
25+
',' => 'comma',
26+
':' => 'colon',
27+
'@' => 'current',
28+
'&' => 'expref',
29+
'\(' => 'lparen',
30+
'\)' => 'rparen',
31+
'\{' => 'lbrace',
32+
'\}' => 'rbrace',
33+
'!=' => 'comparator',
34+
'==' => 'comparator',
35+
'<=' => 'comparator',
36+
'>=' => 'comparator',
37+
'<' => 'comparator',
38+
'>' => 'comparator',
39+
'[ \t]' => 'skip',
3940
];
4041

4142
public function __construct()
@@ -79,6 +80,11 @@ public function tokenize($input)
7980
$token['value'], $offset, $input
8081
);
8182
break;
83+
case 'raw_string':
84+
$token['type'] = 'literal';
85+
$token['value'] = substr($token['value'], 1, -1);
86+
$token['value'] = str_replace("\\'", "'", $token['value']);
87+
break;
8288
}
8389
$tokens[] = $token;
8490
}

0 commit comments

Comments
 (0)