diff options
| author | Elias Haugsbakk <[email protected]> | 2026-09-19 19:38:04 +0200 |
|---|---|---|
| committer | Elias Haugsbakk <[email protected]> | 2026-09-19 19:53:49 +0200 |
| commit | 6b139769f5ac88221991689ba1917d3e307dc2ef (patch) | |
| tree | a61b18a8527ed425699708a00617be11f3b3d270 /src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java | |
| parent | 52a63a487f9d0102db339419aa392f9cd425c0c4 (diff) | |
add variable declaration to parser
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java')
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java b/src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java index c185650..53c7b53 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/tokenization/Lexer.java @@ -6,15 +6,17 @@ import static no.eliashaugsbakk.kompilator.tokenization.LexerState.IN_TYPE; import static no.eliashaugsbakk.kompilator.tokenization.LexerState.IN_WORD; import static no.eliashaugsbakk.kompilator.tokenization.LexerState.NORMAL; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.ASSIGN; +import static no.eliashaugsbakk.kompilator.tokenization.TokenType.COMMA; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.EOF; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.IDENTIFIER; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.KEYWORD; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.LPAREN; +import static no.eliashaugsbakk.kompilator.tokenization.TokenType.NULLABLE; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.RPAREN; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.SEMICOLON; -import static no.eliashaugsbakk.kompilator.tokenization.TokenType.STRING; +import static no.eliashaugsbakk.kompilator.tokenization.TokenType.STRING_LITERAL; import static no.eliashaugsbakk.kompilator.tokenization.TokenType.TYPE; -import static no.eliashaugsbakk.kompilator.tokenization.TokenType.TYPE_DECLARATION; +import static no.eliashaugsbakk.kompilator.tokenization.TokenType.COLON; import java.util.ArrayList; import java.util.List; @@ -47,12 +49,11 @@ public class Lexer { } current = input.charAt(position); - if (!Character.isWhitespace(current)) { - + if (state == IN_STRING) { + inString(); + } else if (!Character.isWhitespace(current)) { if (state == IN_WORD) { inWord(); - } else if (state == IN_STRING) { - inString(); } else if (state == IN_TYPE) { inType(); } @@ -76,7 +77,7 @@ public class Lexer { wordBuffer.append(current); } else if (current == ':') { - tokens.add(new Token(TYPE_DECLARATION, ":", line, column)); + tokens.add(new Token(COLON, ":", line, column)); state = IN_TYPE; } else if (current == '=') { @@ -87,11 +88,18 @@ public class Lexer { tokens.add(new Token(RPAREN, Character.toString(current), line, column)); } else if (current == ';') { tokens.add(new Token(SEMICOLON, Character.toString(current), line, column)); + } else if (current == ',') { + tokens.add(new Token(COMMA, Character.toString(current), line, column)); } } private void inType() { - if (current == '=' || current == ';') { + if (current == '?') { + state = NORMAL; + tokens.add(new Token(TYPE, wordBuffer.toString(), line, column - wordBuffer.length())); + tokens.add(new Token(NULLABLE, "?", line, column)); + clearWordBuffer(); + } else if (current == '=' || current == ';') { state = NORMAL; tokens.add(new Token(TYPE, wordBuffer.toString(), line, column - wordBuffer.length())); clearWordBuffer(); @@ -101,11 +109,10 @@ public class Lexer { } private void inString() { - if (current == '"') { - position++; // skip closing " + if (current == '"') { // closing " gets skipped implicitly current = input.charAt(position); state = NORMAL; - tokens.add(new Token(STRING, wordBuffer.toString(), line, column)); + tokens.add(new Token(STRING_LITERAL, wordBuffer.toString(), line, column)); wordBuffer.delete(0, wordBuffer.length()); } else { wordBuffer.append(current); |
