From 3ecdfbdc7374e4aaae1f679c99fc55ba1b7eaf16 Mon Sep 17 00:00:00 2001 From: Kraemerd <Dominic_Daniel.Kraemer@Student.Reutlingen-University.de> Date: Sun, 8 Jan 2023 19:01:29 +0100 Subject: [PATCH] fixed a bug, parser can now parse decimals in combination with operators --- expressions.txt | 2 +- src/Parser.java | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/expressions.txt b/expressions.txt index 2496a8c..2b40cea 100644 --- a/expressions.txt +++ b/expressions.txt @@ -1 +1 @@ -x+2/40+3*x \ No newline at end of file +40.2+3*x \ No newline at end of file diff --git a/src/Parser.java b/src/Parser.java index bc9dd7c..fcc6fa3 100644 --- a/src/Parser.java +++ b/src/Parser.java @@ -101,6 +101,36 @@ public class Parser { if(ts.size()==1) { return null; } + int index; + for(index=0; index<ts.size(); index++) { + if(ts.get(index).getType()== Lexer.TokenType.SPECIAL) { + if(!parseCharacter(ts.get(index).getData(), ".")) { + break; + } + } + } + if(index==ts.size()) { + return null; + } + //0 + //1 + //2 + //3 + //4 * => index=4 + + //5 + //6 + //7 + List<Lexer.Token> leftList = new LinkedList<>(); + for(int i=0; i<index; i++) { + leftList.add(ts.remove(0)); + } + Expression leftExpression = parseExpression(leftList); + String operator = ts.remove(0).getData(); + parseOperator(operator); + Expression rightExpression = parseExpression(ts); + + /* if(parseCharacter(ts.get(1).getData(), ".")) { return null; } @@ -114,6 +144,8 @@ public class Parser { String operator = ts.remove(0).getData(); parseOperator(operator); Expression rightExpression = parseExpression(ts); + + */ return new BinaryOperation(leftExpression, operator, rightExpression); } -- GitLab