20 import java.util.ArrayDeque;
22 import ca.uqac.lif.bullwinkle.BnfParser.InvalidGrammarException;
23 import ca.uqac.lif.bullwinkle.Builds;
24 import ca.uqac.lif.cep.dsl.GrammarObjectBuilder;
25 import ca.uqac.lif.cep.functions.Constant;
26 import ca.uqac.lif.cep.functions.Function;
27 import ca.uqac.lif.cep.functions.FunctionTree;
28 import ca.uqac.lif.cep.util.Numbers;
38 public static void main(String[] args)
throws BuildException
42 Function f = builder.build(
"+ 3 - 4 5");
43 Object[] value =
new Object[1];
44 f.evaluate(
new Object[]{}, value);
45 System.out.println(value[0]);
55 setGrammar(
"<exp> := <add> | <sbt> | <num>;\n" 56 +
"<add> := + <exp> <exp>;\n" 57 +
"<sbt> := - <exp> <exp>;\n" 58 +
"<num> := ^[0-9]+;");
60 catch (InvalidGrammarException e)
69 public void handleNum(ArrayDeque<Object> stack)
71 String s_num = (String) stack.pop();
72 Number n_num = Float.parseFloat(s_num);
73 Constant c =
new Constant(n_num);
80 public void handleAdd(ArrayDeque<Object> stack)
82 Function f2 = (Function) stack.pop();
83 Function f1 = (Function) stack.pop();
85 stack.push(
new FunctionTree(Numbers.addition, f1, f2));
91 public void handleSbt(ArrayDeque<Object> stack)
93 Function f2 = (Function) stack.pop();
94 Function f1 = (Function) stack.pop();
96 stack.push(
new FunctionTree(Numbers.subtraction, f1, f2));
Use a GrammarObjectBuilder to parse and evaluate a string in Polish notation.