diff options
| author | Thalia Archibald <thalia@archibald.dev> | 2024-06-21 12:58:51 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-21 20:58:51 +0100 |
| commit | fd8442075faa603b3956d51d81486424624c5355 (patch) | |
| tree | 029c1afb736ff0e350c2b032318e5fc376c7e1e4 /chapter09/src/main/java/com | |
| parent | e5f4f7b85fbb91a293a7d89d7b85adfbaeeb51f4 (diff) | |
| download | Simple-fd8442075faa603b3956d51d81486424624c5355.tar.gz Simple-fd8442075faa603b3956d51d81486424624c5355.zip | |
Backport tests (#87)
* Fix unexpected number parse errors
* Add chapter titles
* Split test files by chapter
* Backport rename Fuzzer08Test to FuzzerWrap
* Replace graph build scripts with Makefile
* Backport Chapter05Test.testRegress1
* Backport require space after 'return'
* Backport check EOF after return statement
Diffstat (limited to 'chapter09/src/main/java/com')
| -rw-r--r-- | chapter09/src/main/java/com/seaofnodes/simple/Parser.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/chapter09/src/main/java/com/seaofnodes/simple/Parser.java b/chapter09/src/main/java/com/seaofnodes/simple/Parser.java index b3aeeb22..c4ce71eb 100644 --- a/chapter09/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter09/src/main/java/com/seaofnodes/simple/Parser.java @@ -615,6 +615,7 @@ public class Parser { String getAnyNextToken() { if (isEOF()) return ""; if (isIdStart(peek())) return parseId(); + if (isNumber(peek())) return parseNumberString(); if (isPunctuation(peek())) return parsePunctuation(); return String.valueOf(peek()); } @@ -623,13 +624,16 @@ public class Parser { boolean isNumber(char ch) {return Character.isDigit(ch);} private Type parseNumber() { - int start = _position; - while (isNumber(nextChar())) ; - String snum = new String(_input, start, --_position - start); + String snum = parseNumberString(); if (snum.length() > 1 && snum.charAt(0) == '0') throw error("Syntax error: integer values cannot start with '0'"); return TypeInteger.constant(Long.parseLong(snum)); } + private String parseNumberString() { + int start = _position; + while (isNumber(nextChar())) ; + return new String(_input, start, --_position - start); + } // First letter of an identifier private boolean isIdStart(char ch) { |
