diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-27 11:30:36 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-27 11:30:36 +0100 |
| commit | 217cef25875d3ef04f055bed64752db9b2fbb21e (patch) | |
| tree | 65a5e599b61d5aaba998a02a96cded0f7558f0fe /src/main/java/org/shedlang/compiler/parser | |
| parent | 537aefec06307139899e3f2f2cd74842a3af6345 (diff) | |
Support ignore target
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
3 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 44c132e7..eef01d28 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -301,7 +301,7 @@ public class Parser { static UntypedFunctionStatementNode parseFunctionStatement(TokenIterator<TokenType> tokens) { return switch (tokens.peek().tokenType()) { - case KEYWORD_ASSIGN, KEYWORD_VAL, KEYWORD_VAR -> + case KEYWORD_ASSIGN, KEYWORD_VAL, KEYWORD_VAR, SYMBOL_UNDERSCORE -> parseAssign(tokens); case KEYWORD_RETURN -> @@ -633,6 +633,15 @@ public class Parser { yield new UntypedTargetNode.Tuple(elements, source); } + case SYMBOL_UNDERSCORE -> { + tokens.skip(TokenType.SYMBOL_UNDERSCORE); + + var end = tokens.position(); + var source = start.to(end); + + yield new UntypedTargetNode.Ignore(source); + } + default -> throw new UnexpectedTokenException("target", tokens.peek()); }; diff --git a/src/main/java/org/shedlang/compiler/parser/TokenType.java b/src/main/java/org/shedlang/compiler/parser/TokenType.java index d9cd95aa..53a7877a 100644 --- a/src/main/java/org/shedlang/compiler/parser/TokenType.java +++ b/src/main/java/org/shedlang/compiler/parser/TokenType.java @@ -37,4 +37,5 @@ public enum TokenType { SYMBOL_PLUS, SYMBOL_SEMICOLON, SYMBOL_THIN_ARROW, + SYMBOL_UNDERSCORE, } diff --git a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java index 3793417a..bfa75a8e 100644 --- a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java +++ b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java @@ -51,7 +51,8 @@ public class Tokeniser { RegexTokeniser.rule(TokenType.SYMBOL_PAREN_OPEN, "\\("), RegexTokeniser.rule(TokenType.SYMBOL_PAREN_CLOSE, "\\)"), RegexTokeniser.rule(TokenType.SYMBOL_PLUS, "\\+"), - RegexTokeniser.rule(TokenType.SYMBOL_SEMICOLON, ";") + RegexTokeniser.rule(TokenType.SYMBOL_SEMICOLON, ";"), + RegexTokeniser.rule(TokenType.SYMBOL_UNDERSCORE, "_") ) ); |
