Skip to content
Snippets Groups Projects
Commit d1c43bea authored by niklasBr's avatar niklasBr
Browse files

Added power before point before line

parent f533c920
No related branches found
No related tags found
No related merge requests found
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -34,7 +33,7 @@ public class Parser {
}
// If tokenList contains a dot and not operators (+ - * /): Expression is a value
// If tokenList contains a dot and no operators (+ - * /): Expression is a value
for (Token t : tokenList) {
......@@ -117,11 +116,17 @@ public class Parser {
AstBinaryOp toReturn = new AstBinaryOp();
int positionOfFirstTopLevelOperator = 0;
int positionOfRelevantOperator = 0;
int numberOfBrackets = 0;
int i = 0;
String lastBracket = ")";
int positionOfFirstTopLevelAdditionOrSubtraction = 0,
positionOfFirstTopLevelMultiplicationOrDivision = 0, positionOfFirstTopLevelPower = 0;
boolean flagAdditionSubtraction = false, flagMultiplicationDivision = false, flagPower = false;
for(Token t : tokenList) {
......@@ -130,22 +135,50 @@ public class Parser {
lastBracket = t.tokenString;
}
if( ((t.getTokenString().equals("+") || t.getTokenString().equals("-") || t.getTokenString().equals("*")
|| t.getTokenString().equals("/") || t.getTokenString().equals("^")) && (numberOfBrackets % 2 == 0) ) && lastBracket.equals((")") )) {
if( ((t.getTokenString().equals("+") || t.getTokenString().equals("-") && (numberOfBrackets % 2 == 0) ) && lastBracket.equals((")"))) ) {
positionOfFirstTopLevelOperator = i;
break;
if(!flagAdditionSubtraction) {
flagAdditionSubtraction = true;
positionOfFirstTopLevelAdditionOrSubtraction = i;
}
}
if( ((t.getTokenString().equals("*") || t.getTokenString().equals("/")) && (numberOfBrackets % 2 == 0) ) && lastBracket.equals((")") )) {
if(!flagMultiplicationDivision) {
flagMultiplicationDivision = true;
positionOfFirstTopLevelMultiplicationOrDivision = i;
}
}
if( t.getTokenString().equals("^") && (numberOfBrackets % 2 == 0) && lastBracket.equals((")") )) {
if(!flagPower) {
flagPower = true;
positionOfFirstTopLevelPower = i;
}
}
i++;
}
if(flagAdditionSubtraction) {
positionOfRelevantOperator = positionOfFirstTopLevelAdditionOrSubtraction;
} else if (flagMultiplicationDivision){
positionOfRelevantOperator = positionOfFirstTopLevelMultiplicationOrDivision;
} else if (flagPower) {
positionOfRelevantOperator = positionOfFirstTopLevelPower;
}
// Make two Token lists before and after the expression, parse each as expression
toReturn.astExpression1 = parseAstExpression(new ArrayList<>(tokenList.subList(0, positionOfFirstTopLevelOperator)));
toReturn.astOperator = parseOperator(tokenList.get(positionOfFirstTopLevelOperator));
toReturn.astExpression2 = parseAstExpression(new ArrayList<>(tokenList.subList(positionOfFirstTopLevelOperator + 1, tokenList.size())));
toReturn.astExpression1 = parseAstExpression(new ArrayList<>(tokenList.subList(0, positionOfRelevantOperator)));
toReturn.astOperator = parseOperator(tokenList.get(positionOfRelevantOperator));
toReturn.astExpression2 = parseAstExpression(new ArrayList<>(tokenList.subList(positionOfRelevantOperator + 1, tokenList.size())));
return toReturn;
......
import org.junit.Test;
import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
public class ParserTest {
@Test
public void testPointBeforeLine() throws Exception {
Lexer lexer = new Lexer();
ArrayList<Token> tokens = lexer.lex("3*4+5");
Parser parser = new Parser();
AstExpression root = parser.parse(tokens);
assertEquals(root.astBinaryOp.astExpression1.astBinaryOp.astExpression1.astValue.astNumber.astDigitWoz.astDigitWozContent, 3);
assertEquals(root.astBinaryOp.astExpression1.astBinaryOp.astExpression2.astValue.astNumber.astDigitWoz.astDigitWozContent, 4);
assertEquals(root.astBinaryOp.astExpression2.astValue.astNumber.astDigitWoz.astDigitWozContent, 5);
}
@Test
public void testPowerBeforePoint() throws Exception {
Lexer lexer = new Lexer();
ArrayList<Token> tokens = lexer.lex("12+3^4*5");
Parser parser = new Parser();
AstExpression root = parser.parse(tokens);
assertEquals(root.astBinaryOp.astExpression2.astBinaryOp.astExpression1.astBinaryOp.
astExpression1.astValue.astNumber.astDigitWoz.astDigitWozContent, 3);
assertEquals(root.astBinaryOp.astExpression2.astBinaryOp.astExpression1.astBinaryOp.
astExpression2.astValue.astNumber.astDigitWoz.astDigitWozContent, 4);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment