diff --git a/expressions.txt b/expressions.txt index 2496a8c41f9a2197a73951a75488c52093302ad8..2b40ceaf50da3b0bfc6d612b6c9576e312e575a9 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 bc9dd7c53696c2a9141e128c46b7806cd4d05fed..fcc6fa333dc8dce123c0c474f149f5d35d9e0ee2 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); }