diff options
Diffstat (limited to 'src/Compiler/Parser.java')
-rw-r--r-- | src/Compiler/Parser.java | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/src/Compiler/Parser.java b/src/Compiler/Parser.java index 7d46063..c7b0165 100644 --- a/src/Compiler/Parser.java +++ b/src/Compiler/Parser.java @@ -229,14 +229,12 @@ public class Parser { //Extract the size of the array List<Expression> dimensions = new ArrayList<>(); - Expression dimension = expression(); - dimensions.add(dimension); //Extract the size of each dimension of the array - while(matchAndAdvance(TokenType.COMMA)){ - dimension = expression(); + do{ + Expression dimension = expression(); dimensions.add(dimension); - } + } while(matchAndAdvance(TokenType.COMMA)); matchOrError(TokenType.RIGHT_PAREN, "Expected ')'"); matchOrError(TokenType.DEFINE, ":: Required for variable definition"); @@ -519,28 +517,21 @@ public class Parser { if(definedVars.containsKey(name.text)){ if(definedVars.get(name.text).equals("array")){ List<Expression> positions = new ArrayList<>(); - Expression position = expression(); - positions.add(position); //Parse array positions for each dimension - while(matchAndAdvance(TokenType.COMMA)){ - position = expression(); + do{ + Expression position = expression(); positions.add(position); - } + }while (matchAndAdvance(TokenType.COMMA)); matchOrError(TokenType.RIGHT_PAREN,"Expected ')'"); return new Expression.ArrayVariable(name, positions); } } //If not previously declared, assume function call - List<Token> arguments = new ArrayList<>(); + List<Expression> arguments = new ArrayList<>(); //Parse function call arguments do{ - matchOrError(TokenType.IDENTIFIER, "Expected argument"); - Token argumentValue = getPreviousToken(); - if(definedVars.containsKey(argumentValue.text)){ - arguments.add(argumentValue); - }else{ - throw error(argumentValue, "Argument undefined"); - } + Expression argument = expression(); + arguments.add(argument); }while(matchAndAdvance(TokenType.COMMA)); matchOrError(TokenType.RIGHT_PAREN, "Expected ')"); return new Expression.FunctionCall(name, arguments); @@ -638,6 +629,4 @@ public class Parser { Language.displayError(token ,message); return new Error(); } - - } |