summaryrefslogtreecommitdiff
path: root/parser/src
diff options
context:
space:
mode:
Diffstat (limited to 'parser/src')
-rw-r--r--parser/src/main/java/lv/enes/orang/parser/Parser.java14
1 files changed, 12 insertions, 2 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 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 {
205 } 205 }
206 206
207 private Expression parseCallExpression() throws ParserException { 207 private Expression parseCallExpression() throws ParserException {
208 var callee = parseSimpleExpression(); 208 var callee = parseMemberAccessExpression();
209 while (couldStartSimpleExpression(input.peek().type())) { 209 while (couldStartSimpleExpression(input.peek().type())) {
210 var arg = parseSimpleExpression(); 210 var arg = parseMemberAccessExpression();
211 callee = new CallExpression(callee, arg); 211 callee = new CallExpression(callee, arg);
212 } 212 }
213 return callee; 213 return callee;
@@ -298,6 +298,16 @@ public class Parser {
298 return new LetInExpression(Collections.unmodifiableList(bindings), body); 298 return new LetInExpression(Collections.unmodifiableList(bindings), body);
299 } 299 }
300 300
301 private Expression parseMemberAccessExpression() throws ParserException {
302 var expr = parseSimpleExpression();
303 while (maybeConsumeToken(Token.Type.PERIOD_BRACKET_LEFT)) {
304 var idx = parseExpression();
305 consumeToken(Token.Type.BRACKET_RIGHT);
306 expr = new ArrayAccessExpression(expr, idx);
307 }
308 return expr;
309 }
310
301 private Statement parseReplLine() throws ParserException { 311 private Statement parseReplLine() throws ParserException {
302 if (input.peek().type() == Token.Type.DEF) { 312 if (input.peek().type() == Token.Type.DEF) {
303 return parseStatement(); 313 return parseStatement();