From 921d4ccdcc7b41567e74d6fdc40567e573b27e93 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 18 Jan 2017 14:02:31 -0500 Subject: [PATCH] auto-sync --- .../autsia/bracer/test/BracerParserTest.java | 2 ++ .../soft/javaluator/AbstractEvaluator.java | 28 +++++++++++++------ .../com/fathzer/soft/javaluator/Operator.java | 11 ++++++++ .../src/com/rusefi/test/ParserTest.java | 6 +++- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java b/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java index 16bb51d86c..5adc1d86ad 100644 --- a/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java +++ b/java_console/models/src/com/autsia/bracer/test/BracerParserTest.java @@ -56,6 +56,8 @@ public class BracerParserTest { @Test public void testBooleanConversion() throws ParseException { + assertParse("1 2 + 3 -", "1 + 2 - 3"); + assertParse("1 2 | 3 |", "1 | 2 | 3"); assertParse("2 1 >", "2 > 1"); assertParse("rpm 0 >", "rpm > false"); assertParse("rpm 0 >", "(rpm > false)"); diff --git a/java_console/models/src/com/fathzer/soft/javaluator/AbstractEvaluator.java b/java_console/models/src/com/fathzer/soft/javaluator/AbstractEvaluator.java index e3e9e7e45d..8e51dbdddc 100644 --- a/java_console/models/src/com/fathzer/soft/javaluator/AbstractEvaluator.java +++ b/java_console/models/src/com/fathzer/soft/javaluator/AbstractEvaluator.java @@ -12,6 +12,7 @@ import java.util.*; * @see License information */ public abstract class AbstractEvaluator { + private static final boolean DETAILED_LOGGER = false; private final Tokenizer tokenizer; private final Map functions; private final Map> operators; @@ -23,7 +24,6 @@ public abstract class AbstractEvaluator { public final Stack stackRPN = new Stack() { @Override public String push(String t) { - System.out.println("RPN push " + t); return super.push(t); } @@ -137,7 +137,7 @@ public abstract class AbstractEvaluator { values.push(value!=null ? value : toValue(literal, evaluationContext)); } else if (token.isOperator()) { Operator operator = token.getOperator(); - stackRPN.push(operator.getRpnSymbol()); + rpnPush("deq", operator.getRpnSymbol()); values.push(evaluate(operator, getArguments(values, operator.getOperandCount()), evaluationContext)); } else { throw new IllegalArgumentException(); @@ -236,14 +236,16 @@ public abstract class AbstractEvaluator { final Deque values = new ArrayDeque() { @Override public void push(T t) { - System.out.println("v push " + t); + if (DETAILED_LOGGER) + System.out.println("v push " + t); super.push(t); } }; // values stack final Deque stack = new ArrayDeque() { @Override public void push(Token t) { - System.out.println("fun push " + t); + if (DETAILED_LOGGER) + System.out.println("fun push " + t); super.push(t); } @@ -268,7 +270,8 @@ public abstract class AbstractEvaluator { } } } else if (token.isCloseBracket()) { - System.out.println("isCloseBracket"); + if (DETAILED_LOGGER) + System.out.println("isCloseBracket"); if (previous==null) { throw new IllegalArgumentException("expression can't start with a close bracket"); } @@ -284,7 +287,8 @@ public abstract class AbstractEvaluator { Token sc = stack.pop(); if (sc.isOpenBracket()) { if (sc.getBrackets().equals(brackets)) { - System.out.println("close>isOpenBracket"); + if (DETAILED_LOGGER) + System.out.println("close>isOpenBracket"); openBracketFound = true; break; } else { @@ -300,7 +304,7 @@ public abstract class AbstractEvaluator { throw new IllegalArgumentException("Parentheses mismatched"); } if (!stack.isEmpty() && stack.peek().isFunction()) { - stackRPN.push(stack.peek().getLiteral()); + rpnPush("function", stack.peek().getLiteral()); // If the token at the top of the stack is a function token, pop it // onto the output queue. int argCount = values.size()-previousValuesSize.pop(); @@ -351,7 +355,7 @@ public abstract class AbstractEvaluator { if (sc.isOperator() && ((token.getAssociativity().equals(Operator.Associativity.LEFT) && (token.getPrecedence() <= sc.getPrecedence())) || (token.getPrecedence() < sc.getPrecedence()))) { - stackRPN.push(sc.getOperator().getRpnSymbol()); +// rpnPush("op1", sc.getOperator().getRpnSymbol()); // Pop o2 off the stack, onto the output queue; output(values, stack.pop(), evaluationContext); } else { @@ -365,7 +369,7 @@ public abstract class AbstractEvaluator { if ((previous!=null) && previous.isLiteral()) { throw new IllegalArgumentException("A literal can't follow another literal"); } - stackRPN.push(token.getBooleanHackedLiteral()); + rpnPush("boolean", token.getBooleanHackedLiteral()); output(values, token, evaluationContext); } previous = token; @@ -390,6 +394,12 @@ public abstract class AbstractEvaluator { return values.pop(); } + private void rpnPush(String msg, String s) { + if (DETAILED_LOGGER) + System.out.println("RPN push " + msg + ": " + s); + stackRPN.push(s); + } + public String getRusEfi() { List list = new ArrayList<>(stackRPN); ListIterator li = list.listIterator(list.size()); diff --git a/java_console/models/src/com/fathzer/soft/javaluator/Operator.java b/java_console/models/src/com/fathzer/soft/javaluator/Operator.java index e3c654bbe5..da29957954 100644 --- a/java_console/models/src/com/fathzer/soft/javaluator/Operator.java +++ b/java_console/models/src/com/fathzer/soft/javaluator/Operator.java @@ -135,4 +135,15 @@ public class Operator { } return true; } + + @Override + public String toString() { + return "Operator{" + + "rpnSymbol='" + rpnSymbol + '\'' + + ", symbol='" + symbol + '\'' + + ", precedence=" + precedence + + ", operandCount=" + operandCount + + ", associativity=" + associativity + + '}'; + } } \ No newline at end of file diff --git a/java_console/models/src/com/rusefi/test/ParserTest.java b/java_console/models/src/com/rusefi/test/ParserTest.java index a8fe996977..d0cb829d91 100644 --- a/java_console/models/src/com/rusefi/test/ParserTest.java +++ b/java_console/models/src/com/rusefi/test/ParserTest.java @@ -10,11 +10,15 @@ import static org.junit.Assert.assertEquals; public class ParserTest { @Test public void testBooleanConversion() throws ParseException { + assertParse("1 2 + 3 -", "1 + 2 - 3"); + assertParse("1 2 | 3 |", "1 | 2 | 3"); + assertParse("2 1 >", "2 > 1"); assertParse("rpm 0 >", "rpm > false"); assertParse("rpm 0 >", "(rpm > false)"); assertParse("rpm user0 > clt user2 > |", "(rpm > user0) or (clt > user2)"); -//todo assertParse("rpm user0 > clt user2 > | vbatt user1 > |", "(rpm > user0) or (clt > user2) or (vbatt > user1)"); + assertParse("1 2 | 3 |", "1 | 2 | 3"); + assertParse("rpm user0 > clt user2 > | vbatt user1 > |", "(rpm > user0) or (clt > user2) or (vbatt > user1)"); } private void assertParse(String rpn, String expression) {