From 02afd00fd3b1a97f3457da708476aac1d81f46bf Mon Sep 17 00:00:00 2001 From: nils <48135649+Nilstrieb@users.noreply.github.com> Date: Fri, 28 May 2021 14:58:30 +0200 Subject: [PATCH] other number support --- .../nilstrieb/grsbpl/language/Lexer.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/nilstrieb/grsbpl/language/Lexer.java b/src/main/java/com/github/nilstrieb/grsbpl/language/Lexer.java index df6a698..49f1292 100644 --- a/src/main/java/com/github/nilstrieb/grsbpl/language/Lexer.java +++ b/src/main/java/com/github/nilstrieb/grsbpl/language/Lexer.java @@ -128,13 +128,34 @@ public class Lexer { } } + private void number() { + int radix = 10; + if (last() == '0') { + if (peek() == 'x') { + consume(); + consume(); + radix = 16; + } else if (peek() == 'b') { + consume(); + consume(); + radix = 2; + } else if (peek() == 'o') { + consume(); + consume(); + radix = 8; + } + } StringBuilder number = new StringBuilder(String.valueOf(last())); - while (Character.isDigit(peek())) { - number.append(advance()); + + while (isAlphaNumeric(peek())) { + char c = advance(); + if (c != '_') { + number.append(c); + } } try { - int value = Integer.parseInt(number.toString()); + int value = Integer.parseInt(number.toString(), radix); add(CHARACTER, value); } catch (NumberFormatException e) { throw lexException("Value not an integer: " + number);