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;
40 public static void main(String[] args)
throws BuildException
44 Function f = builder.build(
"+ 3 - 4 5");
45 Object[] value =
new Object[1];
46 f.evaluate(
new Object[]{}, value);
47 System.out.println(value[0]);
58 setGrammar(
"<exp> := <add> | <sbt> | <num>;\n" 59 +
"<add> := + <exp> <exp>;\n" 60 +
"<sbt> := - <exp> <exp>;\n" 61 +
"<num> := ^[0-9]+;");
63 catch (InvalidGrammarException e)
72 public void handleNum(ArrayDeque<Object> stack)
74 String s_num = (String) stack.pop();
75 Number n_num = Float.parseFloat(s_num);
76 Constant c =
new Constant(n_num);
83 public void handleAdd(ArrayDeque<Object> stack)
85 Function f2 = (Function) stack.pop();
87 Function f1 = (Function) stack.pop();
88 stack.push(
new FunctionTree(Numbers.addition, f1, f2));
94 public void handleSbt(ArrayDeque<Object> stack)
96 Function f2 = (Function) stack.pop();
97 Function f1 = (Function) stack.pop();
99 stack.push(
new FunctionTree(Numbers.subtraction, f1, f2));
Shows what happens when a GrammarObjectBuilder incorrectly manipulates its object stack...