From e897791330f0b36d61cd85ab5a1015d6194a35de Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 24 Aug 2024 04:18:28 +0800 Subject: Added array access. --- parser/src/main/java/lv/enes/orang/parser/Parser.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'parser/src') 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 06183a3..3d1d42b 100644 --- a/parser/src/main/java/lv/enes/orang/parser/Parser.java +++ b/parser/src/main/java/lv/enes/orang/parser/Parser.java @@ -205,9 +205,9 @@ public class Parser { } private Expression parseCallExpression() throws ParserException { - var callee = parseSimpleExpression(); + var callee = parseMemberAccessExpression(); while (couldStartSimpleExpression(input.peek().type())) { - var arg = parseSimpleExpression(); + var arg = parseMemberAccessExpression(); callee = new CallExpression(callee, arg); } return callee; @@ -298,6 +298,16 @@ public class Parser { return new LetInExpression(Collections.unmodifiableList(bindings), body); } + private Expression parseMemberAccessExpression() throws ParserException { + var expr = parseSimpleExpression(); + while (maybeConsumeToken(Token.Type.PERIOD_BRACKET_LEFT)) { + var idx = parseExpression(); + consumeToken(Token.Type.BRACKET_RIGHT); + expr = new ArrayAccessExpression(expr, idx); + } + return expr; + } + private Statement parseReplLine() throws ParserException { if (input.peek().type() == Token.Type.DEF) { return parseStatement(); -- cgit v1.2.3