From 1cc4dc8f773da55c9e16a94b7d5e5e6b570b3db3 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 18 Feb 2016 13:19:57 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- program.own | 5 ++++- src/com/annimon/ownlang/parser/Lexer.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/program.own b/program.own index b7f63a1..860b692 100644 --- a/program.own +++ b/program.own @@ -231,4 +231,7 @@ xarr = [0, 5, 2] xarr[0] += xarr[1] xarr[0] *= xarr[2] xarr[0]++ -println xarr[0] \ No newline at end of file +println xarr[0] + +`extended word variable` = 9 +println `extended word variable` \ No newline at end of file diff --git a/src/com/annimon/ownlang/parser/Lexer.java b/src/com/annimon/ownlang/parser/Lexer.java index 03c0af2..c93a86e 100644 --- a/src/com/annimon/ownlang/parser/Lexer.java +++ b/src/com/annimon/ownlang/parser/Lexer.java @@ -116,6 +116,7 @@ public final class Lexer { final char current = peek(0); if (Character.isDigit(current)) tokenizeNumber(); else if (Character.isJavaIdentifierStart(current)) tokenizeWord(); + else if (current == '`') tokenizeExtendedWord(); else if (current == '"') tokenizeText(); else if (current == '#') { next(); @@ -206,6 +207,21 @@ public final class Lexer { } } + private void tokenizeExtendedWord() { + next();// skip ` + clearBuffer(); + char current = peek(0); + while (true) { + if (current == '\0') throw error("Reached end of file while parsing extended word."); + if (current == '\n' || current == '\r') throw error("Reached end of line while parsing extended word."); + if (current == '`') break; + buffer.append(current); + current = next(); + } + next(); // skip closing ` + addToken(TokenType.WORD, buffer.toString()); + } + private void tokenizeText() { next();// skip " clearBuffer(); @@ -216,6 +232,7 @@ public final class Lexer { current = next(); switch (current) { case '"': current = next(); buffer.append('"'); continue; + case '0': current = next(); buffer.append('\0'); continue; case 'b': current = next(); buffer.append('\b'); continue; case 'f': current = next(); buffer.append('\f'); continue; case 'n': current = next(); buffer.append('\n'); continue;