aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaël Gassmann <mael.gassmann@students.bfh.ch>2021-06-11 11:17:45 +0200
committerMaël Gassmann <mael.gassmann@students.bfh.ch>2021-06-11 11:17:45 +0200
commit403c6a951e890d3e1914779ee35576859a38d33e (patch)
treeff2d5182ad4e72b335624c61a7d48364de61807c
parent126a6c85b60ad07fa29ab48315f0f195fb45d854 (diff)
[+] implemented the 'shell' UI, [~] Small corrections had to be made in the parser
-rw-r--r--calculator-java/src/main/java/ch/bfh/CalculatorLexer.java2
-rw-r--r--calculator-java/src/main/java/ch/bfh/Main.java28
-rw-r--r--calculator-java/src/main/java/ch/bfh/parser/ExpressionParser.java8
-rw-r--r--calculator-java/src/main/java/ch/bfh/parser/Parser.java4
4 files changed, 24 insertions, 18 deletions
diff --git a/calculator-java/src/main/java/ch/bfh/CalculatorLexer.java b/calculator-java/src/main/java/ch/bfh/CalculatorLexer.java
index ba10944..48d009e 100644
--- a/calculator-java/src/main/java/ch/bfh/CalculatorLexer.java
+++ b/calculator-java/src/main/java/ch/bfh/CalculatorLexer.java
@@ -82,7 +82,7 @@ public class CalculatorLexer {
}
else
if (Character.isLetter(src.charAt(idx))) {
- tok.value = 0;
+ tok.value = 0;
tok.type = Token.ID;
tok.str = identifier();
if (tok.str.compareTo("let")==0) tok.type = Token.LET;
diff --git a/calculator-java/src/main/java/ch/bfh/Main.java b/calculator-java/src/main/java/ch/bfh/Main.java
index b0dedf3..302f5ed 100644
--- a/calculator-java/src/main/java/ch/bfh/Main.java
+++ b/calculator-java/src/main/java/ch/bfh/Main.java
@@ -3,21 +3,25 @@ package ch.bfh;
import ch.bfh.parser.ExpressionParser;
import java.util.Arrays;
+import java.util.Scanner;
public class Main {
public static void main(String[] args){
- CalculatorLexer cl = new CalculatorLexer();
-
- //TODO - command line reader instead of arg
-
- // Combines the arguments & init the lexer
- cl.initLexer(
- Arrays.stream(args).reduce("", (expression, arg) -> expression + arg)
- );
-
- ExpressionParser ep = new ExpressionParser(cl);
-
- System.out.println(ep.getValue());
+ Scanner scanner = new Scanner(System.in);
+
+ while (true) {
+ CalculatorLexer cl = new CalculatorLexer();
+ System.out.print("Type your expression: ");
+ String expression = scanner.nextLine();
+
+ try {
+ cl.initLexer(expression);
+ ExpressionParser ep = new ExpressionParser(cl);
+ System.out.println(ep.getValue());
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ }
+ }
}
}
diff --git a/calculator-java/src/main/java/ch/bfh/parser/ExpressionParser.java b/calculator-java/src/main/java/ch/bfh/parser/ExpressionParser.java
index 229e700..f96353e 100644
--- a/calculator-java/src/main/java/ch/bfh/parser/ExpressionParser.java
+++ b/calculator-java/src/main/java/ch/bfh/parser/ExpressionParser.java
@@ -49,6 +49,7 @@ public class ExpressionParser extends Parser {
case Token.SUB:
if (l != null && op == null) { // if the '-' sign is between two term (op)
op = token;
+ this.ops.add(op);
break;
} else if (l != null && r != null) { // if we already found a 'l op r' we roll
l = r;
@@ -69,7 +70,7 @@ public class ExpressionParser extends Parser {
}
continue loop;
case Token.PAR:
- if (lastToken.type == Token.PAL) { // if equal to '(' it means it was created by a Factor
+ if (lastToken != null && lastToken.type == Token.PAL) { // if equal to '(' it means it was created by a Factor
lastToken = token;
break loop;
} else
@@ -260,7 +261,10 @@ public class ExpressionParser extends Parser {
@Override
public double getValue(){
if (expression != null)
- return expression.getValue();
+ if (isNegative)
+ return expression.getValue()*(-1);
+ else
+ return expression.getValue();
if (isNegative)
return value*(-1);
return value;
diff --git a/calculator-java/src/main/java/ch/bfh/parser/Parser.java b/calculator-java/src/main/java/ch/bfh/parser/Parser.java
index 755313a..9e048a6 100644
--- a/calculator-java/src/main/java/ch/bfh/parser/Parser.java
+++ b/calculator-java/src/main/java/ch/bfh/parser/Parser.java
@@ -9,8 +9,6 @@ abstract class Parser{
protected double value;
protected abstract void parse();
- public double getValue(){
- return value;
- }
+ public abstract double getValue();
}