summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Parser.java
diff options
context:
space:
mode:
authorAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-12-07 23:07:23 +0000
committerAidenRushbrooke <72034940+AidenRushbrooke@users.noreply.github.com>2021-12-07 23:07:23 +0000
commit5c4d41c63af3ef064090336a14efe91931051e7e (patch)
treeccb7cf199040b2c7c7a57ace1692dc0046afa1e4 /src/Compiler/Parser.java
parent6279da9b8ede22a77161e9504d2482aba33ec2e8 (diff)
downloadesotericFORTRAN-5c4d41c63af3ef064090336a14efe91931051e7e.tar.gz
esotericFORTRAN-5c4d41c63af3ef064090336a14efe91931051e7e.zip
Fixed known issues
Diffstat (limited to 'src/Compiler/Parser.java')
-rw-r--r--src/Compiler/Parser.java29
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();
}
-
-
}