summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
Diffstat (limited to 'parser')
-rw-r--r--parser/src/main/java/lv/enes/orang/parser/Parser.java15
1 files changed, 14 insertions, 1 deletions
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 {
283 case PAREN_LEFT -> { 283 case PAREN_LEFT -> {
284 consumeToken(Token.Type.PAREN_LEFT); 284 consumeToken(Token.Type.PAREN_LEFT);
285 if (maybeConsumeToken(Token.Type.PAREN_RIGHT)) { 285 if (maybeConsumeToken(Token.Type.PAREN_RIGHT)) {
286 yield VoidExpression.INSTANCE; 286 yield EmptyTupleLiteral.INSTANCE;
287 } 287 }
288 var expr = parseExpression(); 288 var expr = parseExpression();
289 if (maybeConsumeToken(Token.Type.COMMA)) {
290 yield parseTupleExpression(expr);
291 }
289 consumeToken(Token.Type.PAREN_RIGHT); 292 consumeToken(Token.Type.PAREN_RIGHT);
290 yield expr; 293 yield expr;
291 } 294 }
@@ -336,6 +339,16 @@ public class Parser {
336 return new StringLiteral(sb.toString()); 339 return new StringLiteral(sb.toString());
337 } 340 }
338 341
342 private TupleExpression parseTupleExpression(Expression first) throws ParserException {
343 var exprs = new ArrayList<Expression>();
344 exprs.add(first);
345 do {
346 exprs.add(parseExpression());
347 maybeConsumeToken(Token.Type.COMMA);
348 } while (!maybeConsumeToken(Token.Type.PAREN_RIGHT));
349 return new TupleExpression(new NonEmptyList<>(exprs));
350 }
351
339 private Expression parseUnaryExpression() throws ParserException { 352 private Expression parseUnaryExpression() throws ParserException {
340 if (isUnaryOp(input.peek())) { 353 if (isUnaryOp(input.peek())) {
341 var op = toUnaryOp(input.next()); 354 var op = toUnaryOp(input.next());