From 6b0e8c55ad423aef60720ee4b3bb455de74f25f3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Dec 2023 23:48:28 +0000 Subject: Parse break statements --- .../java/org/shedlang/compiler/parser/Parser.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/main/java/org/shedlang/compiler/parser') diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 7b7e8358..1d56120b 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -171,6 +171,23 @@ public class Parser { return new UntypedBoolLiteralNode(value, source); } + private static UntypedFunctionStatementNode parseBreak(TokenIterator tokens) { + var start = tokens.position(); + + tokens.skip(TokenType.KEYWORD_BREAK); + + var expression = tokens.isNext(TokenType.SYMBOL_SEMICOLON) + ? Optional.empty() + : Optional.of(parseTopLevelExpression(tokens)); + + tokens.skip(TokenType.SYMBOL_SEMICOLON); + + var end = tokens.position(); + var source = start.to(end); + + return new UntypedBreakNode(expression, source); + } + private static class CallParser implements OperationParser { @Override public OperatorPrecedence precedence() { @@ -463,6 +480,9 @@ public class Parser { case KEYWORD_ASSIGN, KEYWORD_VAL, KEYWORD_VAR, SYMBOL_UNDERSCORE -> parseAssign(tokens); + case KEYWORD_BREAK -> + parseBreak(tokens); + case KEYWORD_RESUME -> parseResume(tokens); -- cgit v1.2.3