From 403c6a951e890d3e1914779ee35576859a38d33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gassmann?= Date: Fri, 11 Jun 2021 11:17:45 +0200 Subject: [+] implemented the 'shell' UI, [~] Small corrections had to be made in the parser --- .../src/main/java/ch/bfh/CalculatorLexer.java | 2 +- calculator-java/src/main/java/ch/bfh/Main.java | 28 ++++++++++++---------- .../main/java/ch/bfh/parser/ExpressionParser.java | 8 +++++-- .../src/main/java/ch/bfh/parser/Parser.java | 4 +--- 4 files changed, 24 insertions(+), 18 deletions(-) (limited to 'calculator-java/src') 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(); } -- cgit v1.2.3