@@ -116,6 +116,7 @@ public List<Token> tokenize() {
116116 final char current = peek (0 );
117117 if (Character .isDigit (current )) tokenizeNumber ();
118118 else if (Character .isJavaIdentifierStart (current )) tokenizeWord ();
119+ else if (current == '`' ) tokenizeExtendedWord ();
119120 else if (current == '"' ) tokenizeText ();
120121 else if (current == '#' ) {
121122 next ();
@@ -206,6 +207,21 @@ private void tokenizeWord() {
206207 }
207208 }
208209
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+
209225 private void tokenizeText () {
210226 next ();// skip "
211227 clearBuffer ();
@@ -216,6 +232,7 @@ private void tokenizeText() {
216232 current = next ();
217233 switch (current ) {
218234 case '"' : current = next (); buffer .append ('"' ); continue ;
235+ case '0' : current = next (); buffer .append ('\0' ); continue ;
219236 case 'b' : current = next (); buffer .append ('\b' ); continue ;
220237 case 'f' : current = next (); buffer .append ('\f' ); continue ;
221238 case 'n' : current = next (); buffer .append ('\n' ); continue ;
0 commit comments