diff options
author | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-12-07 23:07:23 +0000 |
---|---|---|
committer | AidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com> | 2021-12-07 23:07:23 +0000 |
commit | 5c4d41c63af3ef064090336a14efe91931051e7e (patch) | |
tree | ccb7cf199040b2c7c7a57ace1692dc0046afa1e4 /src/Compiler/Parser.java | |
parent | 6279da9b8ede22a77161e9504d2482aba33ec2e8 (diff) | |
download | esotericFORTRAN-5c4d41c63af3ef064090336a14efe91931051e7e.tar.gz esotericFORTRAN-5c4d41c63af3ef064090336a14efe91931051e7e.zip |
Fixed known issues
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(); } - - } |