summaryrefslogtreecommitdiff
path: root/parser/src/main/java
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2024-08-24 04:18:28 +0800
committerGravatar Uko Kokņevičs2024-08-24 04:18:28 +0800
commite897791330f0b36d61cd85ab5a1015d6194a35de (patch)
tree8faa8ea7f4c9bcadbccc5af9e6f19ab0b2b1621c /parser/src/main/java
parentAdded fancier tuple argument specs. (diff)
downloadorang-e897791330f0b36d61cd85ab5a1015d6194a35de.tar.gz
orang-e897791330f0b36d61cd85ab5a1015d6194a35de.tar.xz
orang-e897791330f0b36d61cd85ab5a1015d6194a35de.zip
Added array access.
Diffstat (limited to 'parser/src/main/java')
-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();