From f37d49367c1ce59ae35dda124d85f9732d0cb484 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 24 Aug 2024 03:08:23 +0800 Subject: Add tuples. --- parser/src/main/java/lv/enes/orang/parser/Parser.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'parser') diff --git a/parser/src/main/java/lv/enes/orang/parser/Parser.java b/parser/src/main/java/lv/enes/orang/parser/Parser.java index 25b57d4..0ff1f78 100644 --- a/parser/src/main/java/lv/enes/orang/parser/Parser.java +++ b/parser/src/main/java/lv/enes/orang/parser/Parser.java @@ -283,9 +283,12 @@ public class Parser { case PAREN_LEFT -> { consumeToken(Token.Type.PAREN_LEFT); if (maybeConsumeToken(Token.Type.PAREN_RIGHT)) { - yield VoidExpression.INSTANCE; + yield EmptyTupleLiteral.INSTANCE; } var expr = parseExpression(); + if (maybeConsumeToken(Token.Type.COMMA)) { + yield parseTupleExpression(expr); + } consumeToken(Token.Type.PAREN_RIGHT); yield expr; } @@ -336,6 +339,16 @@ public class Parser { return new StringLiteral(sb.toString()); } + private TupleExpression parseTupleExpression(Expression first) throws ParserException { + var exprs = new ArrayList(); + exprs.add(first); + do { + exprs.add(parseExpression()); + maybeConsumeToken(Token.Type.COMMA); + } while (!maybeConsumeToken(Token.Type.PAREN_RIGHT)); + return new TupleExpression(new NonEmptyList<>(exprs)); + } + private Expression parseUnaryExpression() throws ParserException { if (isUnaryOp(input.peek())) { var op = toUnaryOp(input.next()); -- cgit v1.2.3