Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface IExpressable {
- public int interpret(final HashMap<String, Integer> variables);
- }
- class Plus implements IExpressable {
- private IExpressable leftOperand = null;
- private IExpressable rightOperand = null;
- public Plus(final IExpressable left, final IExpressable right) {
- leftOperand = left;
- rightOperand = right;
- }
- @Override
- public int interpret(final HashMap<String, Integer> variables) {
- return leftOperand.interpret(variables)
- + rightOperand.interpret(variables);
- }
- public String toString() {
- return leftOperand.toString() + " + " + rightOperand.toString();
- }
- }
- class Parser {
- static public IExpressable parseExpression(final String expression) {
- IExpressable syntaxTree = null;
- Pattern numberPattern = Pattern.compile("[+-]?\\d+");
- Stack<IExpressable> expressionStack = new Stack<IExpressable>();
- for(String token : expression.split(" ")) {
- if(token.equals("+")) {
- IExpressable subExpression = new Plus(expressionStack.pop(), expressionStack.pop());
- expressionStack.push(subExpression);
- } else {
- expressionStack.push(new Variable(token));
- }
- }
- syntaxTree = expressionStack.pop();
- return syntaxTree;
- }
- }
Add Comment
Please, Sign In to add comment