@@ -116,6 +116,7 @@ public List<Token> tokenize() {
116
116
final char current = peek (0 );
117
117
if (Character .isDigit (current )) tokenizeNumber ();
118
118
else if (Character .isJavaIdentifierStart (current )) tokenizeWord ();
119
+ else if (current == '`' ) tokenizeExtendedWord ();
119
120
else if (current == '"' ) tokenizeText ();
120
121
else if (current == '#' ) {
121
122
next ();
@@ -206,6 +207,21 @@ private void tokenizeWord() {
206
207
}
207
208
}
208
209
210
+ private void tokenizeExtendedWord () {
211
+ next ();// skip `
212
+ clearBuffer ();
213
+ char current = peek (0 );
214
+ while (true ) {
215
+ if (current == '\0' ) throw error ("Reached end of file while parsing extended word." );
216
+ if (current == '\n' || current == '\r' ) throw error ("Reached end of line while parsing extended word." );
217
+ if (current == '`' ) break ;
218
+ buffer .append (current );
219
+ current = next ();
220
+ }
221
+ next (); // skip closing `
222
+ addToken (TokenType .WORD , buffer .toString ());
223
+ }
224
+
209
225
private void tokenizeText () {
210
226
next ();// skip "
211
227
clearBuffer ();
@@ -216,6 +232,7 @@ private void tokenizeText() {
216
232
current = next ();
217
233
switch (current ) {
218
234
case '"' : current = next (); buffer .append ('"' ); continue ;
235
+ case '0' : current = next (); buffer .append ('\0' ); continue ;
219
236
case 'b' : current = next (); buffer .append ('\b' ); continue ;
220
237
case 'f' : current = next (); buffer .append ('\f' ); continue ;
221
238
case 'n' : current = next (); buffer .append ('\n' ); continue ;
0 commit comments