20 import ca.uqac.lif.bullwinkle.BnfParser.InvalidGrammarException;
21 import ca.uqac.lif.bullwinkle.Builds;
22 import ca.uqac.lif.cep.dsl.GrammarObjectBuilder;
23 import ca.uqac.lif.cep.functions.Constant;
24 import ca.uqac.lif.cep.functions.Function;
25 import ca.uqac.lif.cep.functions.FunctionTree;
26 import ca.uqac.lif.cep.util.Numbers;
36 public static void main(String[] args)
throws BuildException
40 Function f = builder.build(
"+ 3 - 4 5");
41 Object[] value =
new Object[1];
42 f.evaluate(
new Object[]{}, value);
43 System.out.println(value[0]);
53 setGrammar(
"<exp> := <add> | <sbt> | <num>;\n" 54 +
"<add> := + <exp> <exp>;\n" 55 +
"<sbt> := - <exp> <exp>;\n" 56 +
"<num> := ^[0-9]+;");
58 catch (InvalidGrammarException e)
66 @Builds(rule=
"<num>", pop=
true)
67 public Constant handleNum(Object ... parts)
69 return new Constant(Float.parseFloat((String) parts[0]));
74 @Builds(rule=
"<add>", pop=
true)
75 public FunctionTree handleAdd(Object ... parts)
77 return new FunctionTree(Numbers.addition,
78 (Function) parts[1], (Function) parts[2]);
83 @Builds(rule=
"<sbt>", pop=
true)
84 public FunctionTree handleSbt(Object ... parts)
86 return new FunctionTree(Numbers.subtraction,
87 (Function) parts[1], (Function) parts[2]);
Use a GrammarObjectBuilder to parse and evaluate a string in Polish notation.