summaryrefslogtreecommitdiff
path: root/parser/src/main/java
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2024-08-24 03:08:23 +0800
committerGravatar Uko Kokņevičs2024-08-24 03:08:23 +0800
commitf37d49367c1ce59ae35dda124d85f9732d0cb484 (patch)
treed7ed316a75a5a3533378ba3890b36f5d5a2f4bf1 /parser/src/main/java
parentAdd lombok.config. (diff)
downloadorang-f37d49367c1ce59ae35dda124d85f9732d0cb484.tar.gz
orang-f37d49367c1ce59ae35dda124d85f9732d0cb484.tar.xz
orang-f37d49367c1ce59ae35dda124d85f9732d0cb484.zip
Add tuples.
Diffstat (limited to 'parser/src/main/java')
-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());